小C的數學問題 Set應用

2021-09-16 19:45:48 字數 1690 閱讀 9539

題目傳送門

時間限制: 1 sec  記憶體限制: 128 mb

提交: 398  解決: 84

[提交] [狀態] [命題人:外部匯入]

題目描述

小c是個雲南中醫學院的大一新生,在某個星期二,他的高數老師扔給了他乙個問題。

讓他在1天的時間內給出答案。

但是小c不會這問題,現在他來請教你。

請你幫他解決這個問題。

有n個數,每個數有權值。

數學老師定義了區間價值為區間和乘上區間內的最小值。

現在要你找出有最大區間價值的區間是什麼,並輸出區間價值。

輸入每個輸入檔案只包含單組資料。

第一行乙個整數n。(1 <= n <= 100000)

第二行n個整數a_1,a_2,...,a_n。(0 <= a_i <= 1000000)

輸出第一行輸出乙個整數,表示最大的區間價值。

第二行輸出兩個整數,表示區間的起點和終點。

保證答案唯一。

複製樣例資料

6

10 1 9 4 5 9

樣例輸出

108

3 6

解題思路:將arr[i]作為最小值,分別尋找左邊比arr[i]小的那個位置的後乙個位置和右邊比arr[i]小的那個位置的前乙個位置,但是直接暴力會超時,可以優化查詢左邊比arr[i]小的位置和右邊比arr[i]小的位置,用set維護

ac**:

#include #include #include #include #include #include #include #include #include #include #include using namespace std;

#define io ios::sync_with_stdio(0),cin.tie(0)

#define ms(arr) memset(arr,0,sizeof(arr))

#define mc(a,b) memcpy(a,b,sizeof(b))

#define inf 0x3f3f3f

#define fin freopen("in.txt", "r", stdin)

#define fout freopen("out.txt", "w", stdout)

typedef long long ll;

typedef unsigned long long ull;

const int mod=1e9+7;

const int n=1e5+7;

struct node

arr[n];

int n;

ll sum[n];

set s1,s2;

bool cmp(node a,node b)

sort(arr+1,arr+n+1,cmp);

set::iterator it;

s1.clear();

s2.clear();

s1.insert(n+1);

s2.insert(n+1);

int i=1;

int l,r,t1,t2;

ll ma=-1;

int l,r;

while(ima)

}for(int j=l;j<=r;j++)

i=r+1;

}cout

}

小C的數學問題

思路 思路就是把a i 作為最小值,然後去用兩個指標去分別尋找a i 左側比a i 小的那個位置的後乙個位置以及右側比a i 大的那個位置的前乙個位置。然後我就開始根據這個思路去求解問題,但是沒有進行優化直接進行的,時間超時。includeusing namespace std const int ...

問題 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的階乘會是...