一本通 最大連續和

2022-05-07 21:18:10 字數 723 閱讀 1538

寫下單調佇列思路怕自己忘

計算區間和的問題,一般轉換為兩個字首和相減,所以我們先求出字首和sum[i]表示前i項的和,那麼就轉化成了求 $s[r]-s[l-1]$

列舉右端點,則問題變為:找到乙個左端點, $i−m<=j<=i−1$ 且 $s[j]$最小

然後執行單調佇列的幾個步驟:

判斷隊首與i的距離是否超過m的範圍,若超出則彈

更新答案,因為此時隊首就是右端點為i時,左端點j最佳選擇

不斷刪除隊尾,直到隊尾的sum小於sum[i],然後將i入隊

#include #include 

#include

#include

#define re register int

#define ll long long

#define maxn 300005

using

namespace

std;

inta[maxn], q[maxn], sum[maxn];

intl, r;

intn, m;

intmain()

printf(

"%d\n

", ans);

return0;

}

一本通1549最大數

題目描述 原題來自 jsoi 2008 給定乙個正整數數列 a1 a2 a3 an 每乙個數都在 0 p 1 之間。可以對這列數進行兩種操作 程式執行的最開始,整數序列為空。寫乙個程式,讀入操作的序列,並輸出詢問操作的答案。輸入格式 第一行有兩個正整數 m,p,意義如題目描述 接下來 m 行,每一行...

最大連續和

這個問題對我來說還挺難的,當初做dp時水過去了,但沒徹底理解,這次打算好好分析一下,爭取徹底搞懂。首先,像 1 1 2 2 3 3 4 4 5 5這樣的數列,想要找連續最大和,可以有很多種方法,從最慢的列舉o n 3 到最快的動態規劃o n 毫無疑問,我們要選擇複雜度低的演算法。所以我這裡就只分析兩...

最大連續和

求陣列中數的最大連續和,如 1,1,1,1,1 最大連續和為3 一 動態規劃 當我們從頭到尾遍歷這個陣列的時候,對於陣列裡的乙個整數,它有幾種選擇呢?它只有兩種選擇 1 加入之前的subarray 2.自己另起乙個subarray。那什麼時候會出現這兩種情況呢?設狀態為f j 表示以s j 結尾的最...