單調佇列簡單應用 最大子序和

2021-09-25 10:02:24 字數 755 閱讀 8388

description

輸入乙個長度為n的整數序列,從中找出一段不超過m的連續子串行,使得整個序列的和最大。 例如 1,-3,5,1,-2,3 當m=4時,s=5+1-2+3=7 當m=2或m=3時,s=5+1=6。

input

第一行兩個數n,m(n,m<=300000) 第二行有n個數,要求在n個數找到最大子序和。

output

乙個數,即最大子序和s(s值不超過long long int)。

資料很大,最多允許o(nlogn)的演算法,暴力的省省吧;

通讀題目,可能比較難以與單調佇列扯上聯絡,但是又想到,子序和的求法,常用方法是字首和相減,即對於任意k#include#include#define file

#define maxn 300005

#includeusing namespace std;

struct node;

node sum[maxn];

dequek;

long long ans=-999999999;

int main()

k.push_back(sum[1]);

ans=max(ans,k.front().num);//注意從第一項就開始判斷最大值

for(int r=1;r<=m;r++)

cout<#ifdef file

fclose(stdin);

fclose(stdout);

#endif

return 0;

}

最大子序和 單調佇列

輸入乙個長度為n的整數序列,從中找出一段長度不超過m的連續子串行,使得子串行中所有數的和最大。輸入格式 第一行輸入兩個整數n,m。第二行輸入n個數,代表長度為n的整數序列。同一行數之間用空格隔開。輸出格式 輸出乙個整數,代表該序列的最大子序和。資料範圍 1 n,m 300000 輸入樣例 6 4 1...

JOI(TYVJ)最大子序和 DP 單調佇列

輸入乙個長度為n的整數序列,從中找出一段不超過m的連續子串行,使得整個序列的和最大。例如 1,3,5,1,2,3 當m 4時,s 5 1 2 3 7 當m 2或m 3時,s 5 1 6 計算區間和的問題一般用字首和表示。先用s i 表示序列中前i項的和,然後s i s j 1 就可以表示i j的和 ...

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...