傳送門
題意:
輸入乙個長度為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...