记录编号 393436 评测结果 AAAAAAAAAAAA
题目名称 售票系统 最终得分 100
用户昵称 GravatarJustWB 是否通过 通过
代码语言 C++ 运行时间 0.175 s
提交时间 2017-04-11 10:17:53 内存使用 16.33 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
int c,s,r;
int o,d,n;
int bz=0x7ffff;
bool pan;
queue<bool> p;
struct stree
{
	int l,r,f;
	int z;
	int lazy;
	bool lp;
	stree(){l=0;r=0;z=0;lazy=0;f=0;lp=0;}
}tree[700101];
void build(int l,int r,int now)
{
	int mid=(l+r)/2;
	tree[now].l=l;tree[now].r=r;tree[now].z=s;
	if(l==r)return;
	tree[2*now].f=now;tree[2*now+1].f=now;
	build(l,mid,2*now);build(mid+1,r,2*now+1);
}
void updatex(int now,int v)
{
	tree[now].z-=v;tree[now].lp=0;tree[now].lazy=0;
	if(tree[now].l==tree[now].r)return;
	tree[now*2].lp=1;tree[now*2].lazy+=v;
	tree[now*2+1].lp=1;tree[now*2+1].lazy+=v;
//	if(abs(tree[now].l-tree[now].r)==1)
//	{
//		updatex(2*now,tree[2*now].lazy);
//		updatex(2*now+1,tree[2*now+1].lazy);
//	}
}
void updates(int now)
{
	if(tree[2*now].lp)updatex(2*now,tree[now*2].lazy);
	if(tree[2*now+1].lp)updatex(2*now+1,tree[now*2+1].lazy);
	tree[now].z=min(tree[2*now].z,tree[2*now+1].z);
	if(now==1)return;
	updates(tree[now].f);
}
void search(int l,int r,int dl,int dr,int now)
{
	int mid=(l+r)/2;
	if(tree[now].lp)
	{
		updatex(now,tree[now].lazy);
		updates(tree[now].f);
	}
	if(l==dl&&r==dr)
	{
		if(tree[now].z<bz)bz=tree[now].z;
		return;
	}
	if(mid<dl)
	{
		search(mid+1,r,dl,dr,2*now+1);
		return;
	}
	if(dr<=mid)
	{
		search(l,mid,dl,dr,2*now);
		return;
	}
	if(mid>=l&&mid<r)
	{
		search(l,mid,dl,mid,2*now);
		search(mid+1,r,mid+1,dr,2*now+1);
		return;
	}
}
void gx(int l,int r,int dl,int dr,int now)
{
	int mid=(l+r)/2;
	if(l==dl&&r==dr)
	{
		updatex(now,n);
		updates(tree[now].f);
		return;
	}
	if(mid<dl)
	{
		gx(mid+1,r,dl,dr,2*now+1);
		return;
	}
	if(mid>=dr)
	{
		gx(l,mid,dl,dr,2*now);
		return;
	}
	if(mid>=l&&mid<r)
	{
		gx(l,mid,dl,mid,2*now);
		gx(mid+1,r,mid+1,dr,2*now+1);
		return;
	}
}
int main()
{
	freopen("railway.in","r",stdin);
	freopen("railway.out","w",stdout);
//freopen("bl.in","w",stdout);
	scanf("%d%d%d",&c,&s,&r);
	build(1,c,1);
	for(int i=1;i<=r;i++)
	{
		scanf("%d%d%d",&o,&d,&n);
		pan=0;bz=0x7ffff;
		search(1,c,o,d-1,1);
		if(bz>=n)
		{
			p.push(1);
			gx(1,c,o,d-1,1);
		}
		else
		{
			p.push(0);
		}
	}
	while(!p.empty())
	{
		if(p.front())printf("YES\n");
		else printf("NO\n");
		p.pop();
	}
	return 0;
}