思路:思路就是把a[i]作為最小值,然後去用兩個指標去分別尋找a[i]左側比a[i]小的那個位置的後乙個位置以及右側比a[i]大的那個位置的前乙個位置。然後我就開始根據這個思路去求解問題,但是沒有進行優化直接進行的,時間超時。
**:
#includeusing namespace std;
const int maxn = 100005;
#define ll long long
int a[maxn];
ll sum[maxn];
int main()
int l, r, l, r;
ll ma = 0;
for(int i = 1; i <= n; i++)
}printf("%lld\n", ma);
printf("%d %d\n", l, r);
return 0;
}
後來優化查詢左邊比a[i]小的那個位置,右邊比a[i]大的那個位置,通過set來維護。
**:
#includeusing namespace std;
const int maxn = 100005;
#define ll long long
ll sum[maxn];
struct node
a[maxn];
sets1, s2;//s1用來訪問左側,s2用來訪問右側。
set::iterator it;
bool cmp(node a, node b)
int main()
int l, r, l, r;
ll ma = -1;
int i = 1;
s1.clear();
s2.clear();
s1.insert(n+1);
s2.insert(n+1);
sort(a+1, a+1+n, cmp);//排序
while(i <= n)
}for(int j = l; j <= r; j++)
i = r+1;
}printf("%lld\n", ma);
printf("%d %d\n", l, r);
return 0;
}
單調棧實現:
**:
#include#include#include#includeusing namespace std;
const int maxn = 100005;
#define ll long long
stacks;
int a[maxn];
ll sum[maxn];
int main()
a[n+1] = -1;
int l, r;
ll ma = 0;
for(int i = 1; i <= n+1; i++)
}// s.push(i);
//cout<
s.push(top); //將最後一次出棧的棧頂元素入棧
a[top]=a[i];}}
printf("%lld\n",ma);
printf("%d %d\n",l, r);
return 0;
}
問題 J 小C的數學問題
題目描述 小c是個雲南中醫學院的大一新生,在某個星期二,他的高數老師扔給了他乙個問題。讓他在1天的時間內給出答案。但是小c不會這問題,現在他來請教你。請你幫他解決這個問題。有n個數,每個數有權值。數學老師定義了區間價值為區間和乘上區間內的最小值。現在要你找出有最大區間價值的區間是什麼,並輸出區間價值...
小P的數學問題
晚上,小p喜歡在寢室裡乙個個靜靜的學習或者思考,享受自由自在的單身生活。他總是能從所學的知識散發出奇妙的思維。今天他想到了乙個簡單的階乘問題,0!1 1!1 2!1 2 2 3!1 2 3 6 4!1 2 3 4 24 5!1 2 3 4 5 120 如果 n 1000000000,那麼n的階乘會是...
小C的數學問題 Set應用
題目傳送門 時間限制 1 sec 記憶體限制 128 mb 提交 398 解決 84 提交 狀態 命題人 外部匯入 題目描述 小c是個雲南中醫學院的大一新生,在某個星期二,他的高數老師扔給了他乙個問題。讓他在1天的時間內給出答案。但是小c不會這問題,現在他來請教你。請你幫他解決這個問題。有n個數,每...