Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
33682 | 22fhq | 【S】rent | C++ | 运行超时 | 5 | 1000 MS | 17916 KB | 1112 | 2024-10-18 14:19:55 |
#include<bits/stdc++.h> using namespace std; #define int long long int n,m,k,d; struct node{ int m, l, r,s; void operator=(int y){ m=l=r=max(0ll,y); s=y; } }; node operator+(node x,node y){ return {max({x.m,y.m,x.r+y.l}),max(x.l,x.s+y.l),max(y.r,y.s+x.r),x.s+y.s}; } node t[2000006]; #define ls (p<<1) #define rs (p<<1|1) #define mid (l+r>>1) void pu(int p){ t[p]=t[ls]+t[rs]; } void bd(int l,int r,int p){ if(l==r){ t[p]=-k; return; } bd(l,mid,ls),bd(mid+1,r,rs); pu(p); return; } void upd(int l,int r,int id,int x,int p){ if(l==r){ t[p]=x; return; } if(mid>=id)upd(l,mid,id,x,ls); else upd(mid+1,r,id,x,rs); pu(p); return; } int pe[500005]; signed main(){ //freopen("rent.in","r",stdin); // freopen("rent.out","w",stdout); cin>>n>>m>>k>>d; while(m--){ int p,x; cin>>p>>x; pe[p]+=x; upd(1,n,p,pe[p]-k,1); if(t[1].m>k*d)cout<<"NO"<<endl; else cout<<"YES"<<endl; } return 0; }