247. 售票系统
★★☆ 输入文件:railway.in
输出文件:railway.out
简单对比
时间限制:1 s 内存限制:128 MB
【问题描述】
某次列车途经C个城市,城市编号依次为1到C,列车上共有S个座位,铁路局规定售出的车票只能是坐票, 即车上所有的旅客都有座。售票系统是由计算机执行的,每一个售票申请包含三个参数,分别用O、D、N表示,O为起始站,D为目的地站,N为车票张数。售票 系统对该售票申请作出受理或不受理的决定,只有在从O到D的区段内列车上都有N个或N个以上的空座位时该售票申请才被受理。请你写一个程序,实现这个自动 售票系统。
【输入格式】
第一行包含三个用空格隔开的整数C、S和R,其中1≤C≤60000, l≤S≤60000,1≤R≤60000。C为城市个数,S为列车上的座位数,R为所有售票申请总数。接下来的R行每行为一个售票申请,用三个由空格隔开的整数O,D和N表示,O为起始站,D 为目的地站,N为车票张数,其中1≤D≤C,1≤O≤C,所有的售票申请按申请的时间从早到晚给出。
【输出格式】
输出共有R行,每行输出一个“YES”或“NO”,表示当前的售票申请被受理或不被受理。
【输入输出样例】
输入:
4 6 4 1 4 2 1 3 2 2 4 3 1 2 3
输出:
YES YES NO NO
区间加,区间最大值
注意别把输入搞混了
// // main.cpp // cogs247 // // Created by Candy on 10/10/16. // Copyright © 2016 Candy. All rights reserved. // #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #define m (l+r)/2 #define lson o<<1,l,m #define rson o<<1|1,m+1,r #define lc o<<1 #define rc o<<1|1 using namespace std; typedef long long ll; const int N=6e4+5; inline int read(){ char c=getchar();int x=0,f=1; while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} return x*f; } int C,S,n,l,r,v; struct node{ int mx,lazy; }t[N<<2]; inline void paint(int o,int v){ t[o].mx+=v; t[o].lazy+=v; } inline void pushDown(int o){ paint(lc,t[o].lazy); paint(rc,t[o].lazy); t[o].lazy=0; } void add(int o,int l,int r,int ql,int qr,int v){ if(ql<=l&&r<=qr) paint(o,v); else{ pushDown(o); if(ql<=m) add(lson,ql,qr,v); if(m<qr) add(rson,ql,qr,v); t[o].mx=max(t[lc].mx,t[rc].mx); } } int query(int o,int l,int r,int ql,int qr){//printf("%d %d\n",l,r); if(ql<=l&&r<=qr) return t[o].mx; else{ pushDown(o); int ans=0; if(ql<=m) ans=max(ans,query(lson,ql,qr)); if(m<qr) ans=max(ans,query(rson,ql,qr)); return ans; } } int main(int argc, const char * argv[]){ freopen("railway.in","r",stdin); freopen("railway.out","w",stdout); C=read();S=read();n=read(); for(int i=1;i<=n;i++){ l=read();r=read()-1;v=read(); int tmp=query(1,1,C,l,r);//printf("tmp %d\n",tmp); if(S-tmp<v) puts("NO"); else{ puts("YES"); add(1,1,C,l,r,v); } } return 0; }