小C的數學問題

2021-09-16 13:48:03 字數 1784 閱讀 5525

思路:思路就是把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個數,每...