輸入乙個長度為n的整數序列,從中找出一段長度不超過m的連續子串行,使得子串行中所有數的和最大。注意: 子串行的長度至少是1。
輸入格式
第一行輸入兩個整數n,m。
第二行輸入n個數,代表長度為n的整數序列。
同一行數之間用空格隔開。
輸出格式
輸出乙個整數,代表該序列的最大子序和。
資料範圍
1≤n,m≤300000
輸入樣例:
6 41 -3 5 1 -2 3
輸出樣例:
7
求某一段序列和,用字首和來做。維護一段長為m的佇列,問題轉化為從佇列找到最小值。
單調佇列優化:由題目可知,佇列中有些元素永遠不會被使用到。比如佇列裡5, 3 。 3在5的後面,3後面的元素找最小值,由於有3的存在,5不可能是最小值。因此5可以不加入佇列裡。有這個性質,可以知道佇列一定是乙個單調佇列。
#include
#include
#include
#include
using
namespace std;
const
int n =
300010
;int q[n]
, s[n]
;int
main()
int hh =
0, tt =0;
int res = int_min;
for(
int i =
1; i <= n; i++
)
cout << res << endl;
return0;
}
AcWing 135 最大子序和
acwing 135.最大子序和 大佬講解 原題解鏈結見文末 單調佇列 o n 首先單調佇列,不同一般的佇列,他需要的stl是deque 雙端佇列,因為我們要支援隊頭插入和隊尾插入.單調佇列做法大致如下 首先我們需要找到單調性,這道題目的顯而易見.我們知道區間和的做法,一般都是字首和,而字首和的求法...
Acwing135 最大子序和
輸入乙個長度為n的整數序列,從中找出一段長度不超過m的連續子串行,使得子串行中所有數的和最大。注意 子串行的長度至少是1。輸入格式 第一行輸入兩個整數n,m。第二行輸入n個數,代表長度為n的整數序列。同一行數之間用空格隔開。輸出格式 輸出乙個整數,代表該序列的最大子序和。資料範圍 1 n,m 300...
AcWing135 最大子序和
link 陣列沒開夠,爆零兩行淚 longlong開成int,爆零兩行淚 多組忘清空,爆零兩行淚 dp 沒初值,爆零兩行淚 深搜沒邊界,爆零兩行淚 廣搜忘出隊,爆零兩行淚 輸入沒加 爆零兩行淚 模數沒看見,爆零兩行淚 1 不輸出,爆零兩行淚 越界不特判,爆零兩行淚 線段樹開一倍,爆零兩行淚 無向變有...