记录编号 |
582080 |
评测结果 |
AAAAAAAAAAAA |
题目名称 |
售票系统 |
最终得分 |
100 |
用户昵称 |
宇战 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.758 s |
提交时间 |
2023-09-02 15:56:10 |
内存使用 |
15.74 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,m,s,k,o;
const int N=1e5*4;
struct node{
int L,R;
long long sum,lazy,min=0x3f3f3f3f;
}t[N];
long long a[N];
void build(int p,int l,int r){
t[p].L=l;
t[p].R=r;
if(l==r){
t[p].min=a[l];
return ;
}
int mid=(l+r)/2;
build(p<<1,l,mid);
build(p<<1|1,mid+1,r);
t[p].min=min(t[p*2].min,t[p*2+1].min);
}
void spread(int p){
if(t[p].lazy){
t[p*2].min+=(long long)t[p].lazy;
t[p*2].lazy+=t[p].lazy;
t[p*2+1].min+=(long long)t[p].lazy;
t[p*2+1].lazy+=t[p].lazy;
t[p].lazy=0;
}
}
void change(int p,int l,int r,int c){
if(t[p].L>=l&&t[p].R<=r){
t[p].min+=c;
t[p].lazy+=c;
return;
}
spread(p);
int mid=(t[p].L+t[p].R)/2;
if(l<=mid)change(p*2,l,r,c);
if(r>mid)change(p*2+1,l,r,c);
t[p].min=min(t[p*2].min,t[p*2+1].min);
}
long long ask(int p,int l,int r){
if(l<=t[p].L&&r>=t[p].R){
return t[p].min;
}
spread(p);
int mid=(t[p].L+t[p].R)/2;
long long val=0x3f3f3f3f;
if(l<=mid)val=min(ask(p*2,l,r),val);
if(r>mid)val=min(ask(p*2+1,l,r),val);
return val;
}
int main(){
freopen("railway.in","r",stdin);
freopen("railway.out","w",stdout);
cin>>n>>m>>k;
for(int i=1;i<=n;i++){
a[i]=m;
}
build(1,1,n-1);
for(int i=1;i<=k;i++){
int l,r,p;
cin>>l>>r>>p;
change(1,l,r-1,-p);
if(ask(1,l,r-1)<0){
cout<<"NO"<<endl;
change(1,l,r-1,p);
}else{
cout<<"YES"<<endl;
}
}
}