zoukankan      html  css  js  c++  java
  • COGS247. 售票系统[线段树 RMQ]

    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
    ",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
    ",tmp);
            if(S-tmp<v) puts("NO");
            else{
                puts("YES");
                add(1,1,C,l,r,v);
            }
        }
        return 0;
    }


  • 相关阅读:
    c++ 中bool 的默认值
    cocos2d CCLOG格式符号表
    c++数组指针bug
    cocos2d-x-2.2.6创建工程
    Nape实现坐标旋转角度回弹
    haxe 中使用音效
    haxe 嵌入swf 读取里面的内容
    haxe 配置
    Spring Tool Suite(STS)基本安装配置
    git提交忽略文件.gitignore内容
  • 原文地址:https://www.cnblogs.com/candy99/p/5947784.html
Copyright © 2011-2022 走看看