AcWing 135 最大子序和

2022-09-14 14:54:14 字數 959 閱讀 3925

題目傳送門

#include using namespace std;

//brute-force 暴力

const int n = 300010;

const int inf = 0x3f3f3f3f;

int s[n];

int res = -inf;

int n, m;

//tle掉3個點

//通過了 11/14個資料

int main()

因為當列舉每個結點i時,可以視為i是固定的,而j是在區間i - m + 1 <= j <= i內滑動,所以s[i]是乙個固定值,變化的其實是j,即要求s[j - 1]的最小值。滑動視窗的區間是[i - m,i - 1],單調佇列維護的是該區間的最小值,由於滑動視窗不包含i,因此res需要在while上方進行更新。

#include using namespace std;

const int n = 300010;

const int inf = 0x3f3f3f3f;

int n; //n個數字

int m; //連續長度為m

int q[n]; //單調佇列,記錄的是序號

int s[n]; //字首和

int main()

//輸出結果

printf("%d", res);//是字首和,就要小心會不會爆int,但此題n,m上限只有300000,即使是n*m也不會爆int,不用開long long

return 0;

}

AcWing 135 最大子序和

acwing 135.最大子序和 大佬講解 原題解鏈結見文末 單調佇列 o n 首先單調佇列,不同一般的佇列,他需要的stl是deque 雙端佇列,因為我們要支援隊頭插入和隊尾插入.單調佇列做法大致如下 首先我們需要找到單調性,這道題目的顯而易見.我們知道區間和的做法,一般都是字首和,而字首和的求法...

Acwing135 最大子序和

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

AcWing 135 最大子序和

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