1 solutions
-
0
C++ :
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int K,n,c,ans=0; class ZKW{ public: int T[2000010<<2],m1; ZKW(){memset(T,0,sizeof(T)); m1=0;} void build(){for(m1=1;m1<n+1;m1<<=1);} void insert(int s,int t,int v){ int x=0; for(s=s+m1-1,t=t+m1+1;s^t^1;s>>=1,t>>=1){ if(!(s&1)) T[s^1]+=v; if((t&1)) T[t^1]+=v; x=min(T[s],T[s^1]),T[s]-=x,T[s^1]-=x,T[s>>1]+=x; x=min(T[t],T[t^1]),T[t]-=x,T[t^1]-=x,T[t>>1]+=x; } for(;s>1;x=min(T[s],T[s^1]),T[s]-=x,T[s^1]-=x,T[s>>1]+=x,s>>=1); } int ask(int s,int t){ int L=(1<<28),R=(1<<28); for(s=s+m1-1,t=t+m1+1;s^t^1;s>>=1,t>>=1){ L+=T[s];R+=T[t]; if(!(s&1)) L=min(L,T[s^1]);if((t&1)) R=min(R,T[t^1]); } int res=min(L+T[s],R+T[t]); while(s>1) res+=T[s>>=1]; return res; } }zkw; struct node{ int x,y,v; bool operator<(const node &b)const{ if(y==b.y) return x<b.x; return y<=b.y; } }V[2000010]={0}; int main(){ scanf("%d%d%d",&K,&n,&c); for(int i=1;i<=K;++i){ scanf("%d%d%d",&V[i].x,&V[i].y,&V[i].v); V[i].y=V[i].x+V[i].y-1; } sort(V+1,V+K+1); zkw.build();zkw.T[1]=c; for(int i=1;i<=K;++i){ int t=zkw.ask(V[i].x,V[i].y-1); if(t>0){ ans+=min(t,V[i].v); zkw.insert(V[i].x,V[i].y-1,-min(t,V[i].v)); } } printf("%d",ans); }
- 1
Information
- ID
- 704
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By