记录编号 445237 评测结果 AAAAAAAAAAAA
题目名称 售票系统 最终得分 100
用户昵称 GravatarCSU_Turkey 是否通过 通过
代码语言 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;
}