记录编号 445259 评测结果 AAAAAAAAAAAA
题目名称 售票系统 最终得分 100
用户昵称 GravatarCSU_Turkey 是否通过 通过
代码语言 C++ 运行时间 0.719 s
提交时间 2017-09-05 17:20:55 内存使用 1.23 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int a[60005],b[60005],add[60005],n,w,m,mi[60005],len;
void change(int l,int c,int h){
	for(int i=l;i<=min(c,b[l]*len);i++){
		a[i]+=h;
		if(a[i]+add[b[i]]<mi[b[i]])mi[b[i]]=a[i]+add[b[i]];
	}
	if(b[l]!=b[c]){
		for(int i=(b[c]-1)*len+1;i<=c;i++){
			a[i]+=h;
			if(a[i]+add[b[i]]<mi[b[i]])mi[b[i]]=a[i]+add[b[i]];
		}
	}
	for(int i=b[l]+1;i<b[c];i++){
		add[i]+=h;
		mi[i]+=h;
	}
}
int q(int l,int c){
	int h=0x3fffffff;
	for(int i=l;i<=min(c,b[l]*len);i++)h=min(a[i]+add[b[i]],h);
	if(b[l]!=b[c]){
		for(int i=(b[c]-1)*len+1;i<=c;i++)h=min(a[i]+add[b[i]],h);
	}
	for(int i=b[l]+1;i<b[c];i++)h=min(h,mi[i]);
	return h;
}
int main()
{
	freopen("railway.in","r",stdin);
	freopen("railway.out","w",stdout);
//	freopen("1.txt","r",stdin);
	scanf("%d%d%d",&n,&w,&m);
	n--;
	len=sqrt(n)+1;
	for(int i=1;i<=n;i++){
		a[i]=w;
		b[i]=(i-1)/len+1;
		mi[b[i]]=w;
	}
	for(int i=1;i<=m;i++){
		int l,c,h;
		scanf("%d%d%d",&l,&c,&h);
		if(q(l,c-1)>=h){
			cout<<"YES"<<endl;
			change(l,c-1,-h);
		}
		else cout<<"NO"<<endl;
	}
	return 0;
}