记录编号 |
304957 |
评测结果 |
AAAAAAAAAAAA |
题目名称 |
售票系统 |
最终得分 |
100 |
用户昵称 |
cy |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.323 s |
提交时间 |
2016-09-10 10:20:28 |
内存使用 |
3.34 MiB |
显示代码纯文本
#include<stdio.h>
#include<time.h>
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
inline void read(int&x)
{
int flag=1;
char ch;
while(ch=getchar(),ch<'0'||ch>'9') if(ch=='-') flag=-1;
x=(ch^'0');
while(ch=getchar(),ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+(ch^'0');
x*=flag;
}
inline int max(int x,int y){return x>y?x:y;}
//===============================================================
int sum[400010]={0},mk[400010]={0};
inline void push_up(int rt)
{sum[rt]=max(sum[rt<<1],sum[rt<<1|1]);}
void push_down(int rt,int x)
{
mk[rt<<1]+=mk[rt];
mk[rt<<1|1]+=mk[rt];
sum[rt<<1]+=mk[rt];
sum[rt<<1|1]+=mk[rt];
mk[rt]=0;
}
inline void f(int L,int R,int x,int l,int r,int rt)
{
if(L<=l&&R>=r){
mk[rt]+=x;
sum[rt]+=x;
return;
}
push_down(rt,(r-l+1));
int m = (l + r) >> 1;
if(L<=m) f(L,R,x,lson);
if(R>m) f(L,R,x,rson);
sum[rt]=max(sum[rt<<1],sum[rt<<1|1]);
}
inline int q(int L,int R,int l,int r,int rt)
{
push_down(rt,(r-l+1));
if(L<=l&&r<=R) return sum[rt];
int m=l+r>>1,res=0;
if(m>=L) res=max(res,q(L,R,lson));
if(m<R) res=max(res,q(L,R,rson));
return res;
}
int main()
{
freopen("railway.in","r",stdin);
freopen("railway.out","w",stdout);
int n,k,m;
read(n);read(k);read(m);
while(m--)
{
int a,b,c;
read(a);read(b);read(c);
if(q(a,b-1,1,n,1)>k-c)
{printf("NO\n");}
else
{printf("YES\n");f(a,b-1,c,1,n,1);}
}
//printf("%.3lf\n",(double)clock()/CLOCKS_PER_SEC);
}