记录编号 |
445257 |
评测结果 |
AAAAAAAAAAAA |
题目名称 |
售票系统 |
最终得分 |
100 |
用户昵称 |
liuyu |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.748 s |
提交时间 |
2017-09-05 17:19:08 |
内存使用 |
2.37 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,s,q,x,y,z,a[60000+10],ans,u;
int minv[240000+10],addv[240000+10];
void build(int o,int l,int r){
if(l==r)minv[o]=s;
else{
int lc=2*o;
int rc=lc+1,m=l+(r-l)/2;
build(lc,l,m);
build(rc,m+1,r);
minv[o]=s;
}
}
void addma(int o,int l,int r,int _add){
if(l>=x&&r<=y){
ans=min(ans,minv[o]+_add);
}
else{
int lc=2*o;
int rc=lc+1,m=l+(r-l)/2;
if(x<=m)addma(lc,l,m,_add+addv[o]);
if(y>m)addma(rc,m+1,r,_add+addv[o]);
}
}
void add(int o,int l,int r)
{
if(l>=x&&r<=y){
addv[o]-=z;minv[o]-=z;
}
else{
int lc=2*o;
int rc=lc+1,m=l+(r-l)/2;
if(x<=m)add(lc,l,m);
if(y>m)add(rc,m+1,r);
minv[o]=min(minv[lc],minv[rc]);
minv[o]+=addv[o];
}
}
void init(){
scanf("%d%d%d",&n,&s,&q);
for(int i=1;i<=n;i++)a[i]=s;
build(1,1,n);
}
int main(){
freopen("railway.in","r",stdin);
freopen("railway.out","w",stdout);
init();
while(q--){
scanf("%d%d%d",&x,&y,&z);
y-=1;
ans=1e9;
addma(1,1,n,0);
if(ans-z<0)cout<<"NO"<<endl;
else cout<<"YES"<<endl,add(1,1,n);
}
return 0;
}