tyvj 1305(單調佇列)

2021-08-09 08:38:32 字數 568 閱讀 3083

傳送門

題意:

輸入乙個長度為n的整數序列,從中找出一段不超過m的連續子串行,使得整個序列的和最大。

題解:

維護乙個關於字首和的單調遞增的佇列,每次用隊首更新答案,將元素插入隊尾。

p.s.我是乙隻單調佇列都做不來的菜雞。。。

#include

#include

#include

#include

using namespace std;

const int maxn=3e5+4;

int n,m,sum[maxn];

intq[maxn],h=1,t=0,ans=-0x3f3f3f3f;

inline int

read()

while (c>='0'&&c<='9') x=x

*10+c-'0',c=getchar();

return

x*f;

}int main()

printf("%d\n",ans);

return

0;}

tyvj 1305(單調佇列模板題)

首先,把數都弄成字首和sum i 節約時間 列舉右端點i,當i固定的時候,問題就變成了,尋找乙個左端點j,j在區間 i m,i 1 內,並且sum j 最小 使用乙個單調佇列來完成此題,我們從左往右掃一遍右端點,對每個i 1.判斷當前隊頭的數與i的距離是否大於m,大於就把隊頭乾掉 2.此時隊頭就是右...

tyvj1305 最大子序和(單調佇列

時間限制 記憶體限制 評測方式 題目 1000ms 131072kib 標準比較器 local 輸入乙個長度為n的整數序列,從中找出一段不超過m的連續子串行,使得整個序列的和最大。例如 1,3,5,1,2,3 當m 4時,s 5 1 2 3 7 當m 2或m 3時,s 5 1 6 第一行兩個數n,m...

tyvj 1305 最大子序和 dp 單調佇列

時間限制 記憶體限制 評測方式 題目 1000ms 131072kib 標準比較器 local 輸入乙個長度為n的整數序列,從中找出一段不超過m的連續子串行,使得整個序列的和最大。例如 1,3,5,1,2,3 當m 4時,s 5 1 2 3 7 當m 2或m 3時,s 5 1 6 第一行兩個數n,m...