单调队列

最大子序和

http://contest-hunter.org:83/contest/0x10%E3%80%8C%E5%9F%BA%E6%9C%AC%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E3%80%8D%E4%BE%8B%E9%A2%98/1201%20%E6%9C%80%E5%A4%A7%E5%AD%90%E5%BA%8F%E5%92%8C

 1     FOR(i,1,n) sum[i]=sum[i-1]+a[i];
 2     int l=1,r=1;
 3     q[1]=0;
 4     FOR(i,1,n)
 5     {
 6         while(l<=r&&q[l]<i-m) l++;
 7         ans=max(ans,sum[i]-sum[q[l]]);
 8         while(l<=r&&sum[q[r]]>=sum[i]) r--;
 9         q[++r]=i;
10     }

 

posted @ 2019-04-04 16:50  universeplayer  阅读(101)  评论(0编辑  收藏  举报