描述
輸入乙個長度為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(n,m<=300000)
第二行有n個數,要求在n個數找到最大子序和
輸出格式
乙個數,數出他們的最大子序和
樣例輸入
6 4樣例輸出1 -3 5 1 -2 3
7這題是單調佇列的典型題。首先可以把區間和問題轉換為兩個字首和相減的問題。樸素演算法就是列舉左右端點,但演算法複雜度為o(n^2),這道題顯然是過不了的。
所以我們可以只列舉右端點i,當i固定時,找乙個左端點j,其中j屬於[i-m,i-1]並且sum[j]最小。
不妨比較一下任意兩個位置j和k,如果k=sum[j],那麼對所以大於等於i的右端點來說,k都不會是乙個好選擇,直接移除佇列比較好。
**如下
#includeusingnamespace
std;
int a[300005],q[300005],sum[300005
];int
main()
int l=1,r=1,ans=-99999999;q[
1]=0
;for(int i=1;i<=n;i++)
cout
return0;
}
開關問題 Contest Hunter 0201
題目給了t個5 5的01矩陣,你可以將該矩陣中任意位置的數0變1,1變0,在你改變該位置的數時,它的上下左右四個位置的數也會同時發生改變。問你能否6步及以內將該矩陣變為全1矩陣,如果能輸出最少步數,否則輸出 1。這道題一看好像毫無思路,但是你仔細想一想,會發現每個點最多被修改一次,不然就不優了。並且...
Contest Hunter 1401 兔子與兔子
描述 很久很久以前,森林裡住著一群兔子。有一天,兔子們想要研究自己的 dna 序列。我們首先選取乙個好長好長的 dna 序列 小兔子是外星生物,dna 序列可能包含 26 個小寫英文本母 然後我們每次選擇兩個區間,詢問如果用兩個區間裡的 dna 序列分別生產出來兩隻兔子,這兩個兔子是否一模一樣。注意...
ContestHunter暑假歡樂賽 SRM 06
t1二分check。為什麼這麼顯然的我沒看出來tat,還在想倒著加入並查集check什麼的,題寫太多思維定勢啦qaq t2是noip題的弱化版。當時沒看出來,寫了個dp。可以看出這一位比上一位大還是小只由轉移的長度奇偶來決定,開兩個bit分別維護奇偶下標是權值來幫忙轉移就行了 t3幾何題qaq好像得...