记录编号 |
582063 |
评测结果 |
AAAAAAAAAAAA |
题目名称 |
售票系统 |
最终得分 |
100 |
用户昵称 |
┭┮﹏┭┮ |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.103 s |
提交时间 |
2023-09-01 21:34:29 |
内存使用 |
3.74 MiB |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N = 60010;
typedef long long ll;
int n,m,s;
struct made{
int l,r;
ll la,ma;
}t[4*N];
void spread(int x){
if(t[x].la){
t[x*2].ma += t[x].la;
t[x*2].la += t[x].la;
t[x*2+1].ma += t[x].la;
t[x*2+1].la += t[x].la;
t[x].la = 0;
}
}
void add(int x,int l,int r,int ed){
if(l <= t[x].l && t[x].r <= r){
t[x].ma += ed;
t[x].la += ed;
return;
}
spread(x);
int mid = (t[x].l + t[x].r) >> 1;
if(mid >= l)add(x*2,l,r,ed);
if(mid < r)add(x*2+1,l,r,ed);
t[x].ma = max(t[x*2].ma,t[x*2+1].ma);
}
ll ask(int x,int l,int r){
if(l <= t[x].l && t[x].r <= r)return t[x].ma;
spread(x);
int mid = (t[x].l + t[x].r) >> 1;
ll ans = -INT_MAX;
if(mid >= l)ans = max(ans,ask(x*2,l,r));
if(mid < r)ans = max(ans,ask(x*2+1,l,r));
t[x].ma = max(t[x*2].ma,t[x*2+1].ma);
return ans;
}
void build(int x,int l,int r){
t[x].l = l,t[x].r = r;
if(l == r)return;
int mid = (l + r) >> 1;
build(x*2,l,mid);
build(x*2+1,mid+1,r);
}
int main(){
freopen("railway.in","r",stdin);
freopen("railway.out","w",stdout);
scanf("%d%d%d",&n,&s,&m);
build(1,1,n-1);
for(int i = 1;i <= m;i++){
int x,y;ll z;
scanf("%d%d%lld",&x,&y,&z);
if(s >= z + ask(1,x,y-1)){
printf("YES\n");
add(1,x,y-1,z);
}
else{
printf("NO\n");
}
}
return 0;
}