提交时间:2024-10-18 14:19:55

运行 ID: 33682

#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; }