记录编号 306775 评测结果 AAAAAAAAAAAA
题目名称 售票系统 最终得分 100
用户昵称 Gravatar小e 是否通过 通过
代码语言 C++ 运行时间 0.271 s
提交时间 2016-09-13 10:12:16 内存使用 3.34 MiB
显示代码纯文本
//注意区间开闭! 
#include "cstdio"

int C, S, R; 
int Tmax[550000], lazy[250000];

inline void Read(int& a)
{
	a = 0;
	char ch = getchar();
	while(ch < '0' || ch > '9') ch = getchar();
	while(ch >= '0' && ch <= '9'){
		a = a * 10 + ch - '0';
		ch = getchar();
	}
}

inline int GetMax(const int& a, const int& b)
{
	if(a > b) return a;
	return b;
}

inline void PushDown(const int& rt)
{
	const int lch = rt << 1, rch = (rt << 1) | 1;
	Tmax[lch] += lazy[rt]; Tmax[rch] += lazy[rt];
	lazy[lch] += lazy[rt]; lazy[rch] += lazy[rt];
	lazy[rt] = 0;
}

int QueryMax(const int& l, const int& r, const int& rt, const int& s, const int& t)
{
	if(s <= l && t >= r) return Tmax[rt];
	if(lazy[rt]) PushDown(rt);
	const int mid = (l + r) >> 1, lch = rt << 1, rch = (rt << 1) | 1;
	if(t <= mid) return QueryMax(l, mid, lch, s, t);
	else if(s >= mid+1) return QueryMax(mid+1, r, rch, s, t);
	return GetMax(QueryMax(l, mid, lch, s, mid), QueryMax(mid+1, r, rch, mid+1, t));
}

void Add(const int& l, const int& r, const int& rt, const int& s, const int& t, const int& num)
{
	if(s <= l && t >= r){
		Tmax[rt] += num;
		lazy[rt] += num;
		return;
	}
	const int mid = (l + r) >> 1, lch = rt << 1, rch = (rt << 1) | 1;
	if(t <= mid) Add(l, mid, lch, s, t, num);
	else if(s >= mid+1) Add(mid+1, r, rch, s, t, num);
	else{
		Add(l, mid, lch, s, mid, num);
		Add(mid+1, r, rch, mid+1, t, num);
	}
	Tmax[rt] = GetMax(Tmax[lch], Tmax[rch]);
}

int main()
{
 	freopen("railway.in", "r", stdin); freopen("railway.out", "w", stdout);
 	Read(C); Read(S); Read(R);
 	int s, t, num;
 	while(R--){
		Read(s); Read(t); Read(num);
		if(num + QueryMax(1, C, 1, s, t-1) <= S){
			puts("YES");
			Add(1, C, 1, s, t-1, num);
		}
		else puts("NO");
	}
 	fclose(stdin); fclose(stdout);
 	return 0;
}
/*
4 6 4
1 4 2
1 3 2
2 4 3
1 2 3

YES
YES
NO
NO
*/