记录编号 582063 评测结果 AAAAAAAAAAAA
题目名称 售票系统 最终得分 100
用户昵称 Gravatar┭┮﹏┭┮ 是否通过 通过
代码语言 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;
    
}