记录编号 | 445237 | 评测结果 | AAAAAAAAAAAA | ||
---|---|---|---|---|---|
题目名称 | 售票系统 | 最终得分 | 100 | ||
用户昵称 | 是否通过 | 通过 | |||
代码语言 | C++ | 运行时间 | 0.612 s | ||
提交时间 | 2017-09-05 16:40:40 | 内存使用 | 2.14 MiB | ||
#include<bits/stdc++.h> #define mid ((l+r)>>1) #define ls o<<1 #define rs o<<1|1 using namespace std; int c,s,r,f[240005],lazy[240005]; void build(int l,int r,int o){ if(l==r){ f[o]=s; return ; } build(l,mid,ls); build(mid+1,r,rs); f[o]=min(f[ls],f[rs]); } void change(int l,int r,int o,int L,int R,int num){ if(l>=L&&r<=R){ f[o]+=num; lazy[o]+=num; return ; } if(mid>=L)change(l,mid,ls,L,R,num); if(mid<R)change(mid+1,r,rs,L,R,num); f[o]=min(f[ls],f[rs]); f[o]+=lazy[o]; } int q(int l,int r,int o,int L,int R,int sum){ if(l>=L&&r<=R){ return f[o]+sum; } int k=0x3fffffff; if(mid>=L)k=min(k,q(l,mid,ls,L,R,sum+lazy[o])); if(mid<R)k=min(k,q(mid+1,r,rs,L,R,sum+lazy[o])); return k; } int main() { freopen("railway.in","r",stdin); freopen("railway.out","w",stdout); scanf("%d%d%d",&c,&s,&r); build(1,c,1); for(int i=1;i<=r;i++){ int O,d,n; scanf("%d%d%d",&O,&d,&n); if(q(1,c,1,O,d-1,0)>=n){ cout<<"YES"<<endl; change(1,c,1,O,d-1,-n); } else cout<<"NO"<<endl; // cout<<q(1,c,1,O,d,0)<<endl; } return 0; }