BZOJ1577 [Usaco2009 Feb]庙会捷运Fair Shuttle

来源:互联网 发布:悬疑电影推荐 知乎 编辑:程序博客网 时间:2024/04/30 13:46

按结束点排序,然后能塞多少塞多少即可

#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<ctime>#include<cmath>#include<algorithm>#include<iomanip>#include<vector>#include<map>#include<set>#include<bitset>#include<queue>#include<stack>using namespace std;#define MAXN 50010#define MAXM 20010#define INF 1000000000#define MOD 1000000007#define eps 1e-8#define ll long longstruct cw{int s;int t;int v;friend bool operator <(cw x,cw y){return x.t<y.t;}};int n,m,c;cw a[MAXN];int mx[MAXM<<2],ch[MAXM<<2];ll ans;inline void toch(int x,int y){mx[x]+=y;ch[x]+=y;}inline void ud(int x){mx[x]=max(mx[x<<1],mx[x<<1|1]);}inline void pd(int x){if(ch[x]){toch(x<<1,ch[x]);toch(x<<1|1,ch[x]);ch[x]=0;}}int ask(int x,int y,int z,int l,int r){if(y==l&&z==r){return mx[x];}pd(x);int mid=y+z>>1;if(r<=mid){return ask(x<<1,y,mid,l,r);}else if(l>mid){return ask(x<<1|1,mid+1,z,l,r);}else{return max(ask(x<<1,y,mid,l,mid),ask(x<<1|1,mid+1,z,mid+1,r));}}void change(int x,int y,int z,int l,int r,int cv){if(y==l&&z==r){toch(x,cv);return ;}pd(x);int mid=y+z>>1;if(r<=mid){change(x<<1,y,mid,l,r,cv);}else if(l>mid){change(x<<1|1,mid+1,z,l,r,cv);}else{change(x<<1,y,mid,l,mid,cv);change(x<<1|1,mid+1,z,mid+1,r,cv);}ud(x);}int main(){int i;scanf("%d%d%d",&n,&m,&c);for(i=1;i<=n;i++){scanf("%d%d%d",&a[i].s,&a[i].t,&a[i].v);a[i].t--;}sort(a+1,a+n+1);for(i=1;i<=n;i++){int t=min(a[i].v,c-ask(1,1,m,a[i].s,a[i].t));ans+=t;change(1,1,m,a[i].s,a[i].t,t);}printf("%lld\n",ans);return 0;}/*8 15 31 5 213 14 15 8 38 14 214 15 19 12 112 15 24 6 1*/


0 0
原创粉丝点击