BZOJ4385: [POI2015]Wilcze doły
发布日期:2021-05-06 03:47:44 浏览次数:36 分类:技术文章

本文共 1092 字,大约阅读时间需要 3 分钟。

水题。。

反正就是丢到一个单调队列里去然后每次都弹出就好了。。

#include
#include
#include
using namespace std;char c;inline void read(int &a){ a=0;do c=getchar();while(c<'0'||c>'9'); while(c<='9'&&c>='0')a=(a<<3)+(a<<1)+c-'0',c=getchar();}#define ll long longinline void read(ll &a){ a=0;do c=getchar();while(c<'0'||c>'9'); while(c<='9'&&c>='0')a=(a<<3)+(a<<1)+c-'0',c=getchar();}inline int max(int a,int b){return a>b?a:b;}ll Sum[2000001];ll Sum2[2000001];ll Max[2000001];int Data[2000001];struct St{int data,l;};St Stack[2000001];int con,fir;int n,d;ll p;inline void push(int x,int data){ while(con>=fir&&data>Stack[con].data) con--; Stack[++con].l=x; Stack[con].data=data ;}inline void pop(int x){ if(Stack[fir].l<=x-d) fir++;} int L,R;int main(){ read(n); read(p); read(d); fir=1; for(int i=1;i<=n;i++) read(Data[i]),Sum[i]=Sum[i-1]+Data[i],Sum2[i]=Sum[i]-Sum[max(0,i-d)]; fir=1;con=0; int ans=d; push(1,Sum2[d]); L=1; for(int i=d+1;i<=n;i++) { push(i-d+1,Sum2[i]); while(Sum[i]-Sum[L-1]>(ll)Stack[fir].data+p) { L++; if(Stack[fir].l

上一篇:Noi_linux Gedit
下一篇:BZOJ2194: 快速傅立叶之二

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2025年03月27日 22时18分39秒