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 啊呵呵呵 感觉这一道题好像很简单 又好像很难的样子
所以 。。。这一道题的数据看起来有一点可怕啊
先花n logn的时间建树 60000*20=120 0000 60000个询问 每个logn 也是120 0000
加起来看起来好像没有超时的样子诶~QAQ反正这一道题的标签是线段树 就是说可以先加到线段树中
再查一下区间最大值是否大于总座位数 如果大于就是No 再把区间减去刚才加的值
否则就输出Yes啦 (<<仿佛很简单的样子) 敲一敲试试
然鹅发现事情并不简单 首先要打一个标记 还有一个很坑很坑的点:
我第一次交是33分 那么到底是为什毛?
原因是 这是左闭右开区间
就是说x站到y站 y站是下车的 不算!要在输入后把y--
太尴尬了 本以为能一遍A(太蒟了)
代码如下 (本人萌新 刚学打标记不久QAQ)
#include<bits/stdc++.h>
#define ls (p*2)
#define rs (p*2+1)
#define mid (l+r>>1)
#define lson ls,l,mid
#define rson rs,mid+1,r
#define maxn 60005
#define LL long long
#define INF 0x3f3f3f3f
using namespace std;
int n,S,m;
LL sum[maxn<<];
LL lazy_tag[maxn<<];
void Pushdown(int p,int l,int r)
{
lazy_tag[ls]+=lazy_tag[p];
lazy_tag[rs]+=lazy_tag[p];
sum[ls]+=lazy_tag[p];
sum[rs]+=lazy_tag[p];
lazy_tag[p]=;
}
void Add(int p,int l,int r,int s,int t,int z)
{
if(s>r||t<l)
return ;
if(s<=l && r<=t)
{
sum[p]+=z;//Important 打标记必备
lazy_tag[p]+=z;
return;
}
Pushdown(p,l,r);
Add(lson,s,t,z);
Add(rson,s,t,z);
sum[p]=max(sum[ls],sum[rs]);
return;
}
LL Max(int p,int l,int r,int s,int t)
{
if(s>r||t<l)
return -INF;
if(s<=l&&r<=t)
return sum[p];
Pushdown(p,l,r);
return max(Max(lson,s,t),Max(rson,s,t));
}
int main()
{
freopen("railway.in","r",stdin);
freopen("railway.out","w",stdout);
scanf("%d%d%d",&n,&S,&m);
//build(1,1,n); 这里不需要build 了 一开始值都是0
for(int i=;i<=m;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
y--;
if(x>y)
swap(x,y);//防止卡bug
Add(,,n,x,y,z);
if(Max(,,n,x,y)>S)
{
printf("NO\n");
Add(,,n,x,y,-z);
}
else
printf("YES\n");
}
return ;
}

宏定义一波走天下♪(^∇^*)

 

cogs 247. 售票系统 线段树的更多相关文章

  1. COGS247. 售票系统[线段树 RMQ]

    247. 售票系统 ★★☆   输入文件:railway.in   输出文件:railway.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 某次列车途经C个城市,城市 ...

  2. COGS 2638. 数列操作ψ 线段树

    传送门 : COGS 2638. 数列操作ψ 线段树 这道题让我们维护区间最大值,以及维护区间and,or一个数 我们考虑用线段树进行维护,这时候我们就要用到吉司机线段树啦 QAQ 由于发现若干次an ...

  3. [COGS 755]山海经:线段树

    网上似乎这道题的题解很少?写一个吧 我跟这道题的渊源追溯到了上个学期刚刚学线段树的那一天... 当时线段树专题前边的题都是一些板子就不一会就水过了,然后就看到了最后一题的它:山海经 那一个上午,我竭尽 ...

  4. 【CJOJ2316】【模板】可持久化线段树

    题面 Description 这是一道非常直白的可持久化线段树的练习题,目的并不是虐人,而是指导你入门可持久化数据结构. 线段树有个非常经典的应用是处理RMQ问题,即区间最大/最小值询问问题.现在我们 ...

  5. 【cogs247】售票系统【线段树】

    售票系统 输入文件:railway.in 输出文件:railway.out 时间限制:1 s 内存限制:128 MB [问题描述] 某次列车途经C个城市,城市编号依次为1到C,列车上共有S个座位,铁路 ...

  6. 【BZOJ 1901】Zju2112 Dynamic Rankings &&【COGS 257】动态排名系统 树状数组套线段树

    外面是树状数组,里面是动态开点线段树,对于查询我们先把有关点找出来,然后一起在线段树上行走,这样就是单个O(log2)的了 #include <cstdio> #include <v ...

  7. YSZOJ:#247. [福利]可持久化线段树 (最适合可持久化线段树入门)

    题目链接:https://syzoj.com/problem/247 解题心得: 可持久化线段树其实就是一个线段树功能的加强版,加强在哪里呢?那就是如果一颗普通的线段树多次修改之后还能知道最开始的线段 ...

  8. cogs 2554. [福利]可持久化线段树

    题目链接 cogs 2554. [福利]可持久化线段树 题解 没有 代码 #include<cstdio> #include<cstring> #include<algo ...

  9. AC日记——[福利]可持久化线段树 cogs 2554

    2554. [福利]可持久化线段树 ★★☆   输入文件:longterm_segtree.in   输出文件:longterm_segtree.out   简单对比时间限制:3 s   内存限制:2 ...

随机推荐

  1. linux如何查看nginx是否启动

    Nginx是一个高性能的反向代理服务器,现在一般作为我们网站或其他Web服务的第一层代理,用户在浏览器请求首先经过的就是Nginx服务. 如果Nginx服务没有启动或异常结束,将会影响Web服务的正常 ...

  2. [转]java常用正则表达式

    只能输入数字:"^[0-9]*$".  只能输入n位的数字:"^\d{n}$".  只能输入至少n位的数字:"^\d{n,}$".  只能输 ...

  3. 【u232】围棋游戏

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 为了增强幼儿园小朋友的数数能力,小虎老师给了一个家庭游戏作业.让小虎那一块空的围棋盘,随机在一些方格中 ...

  4. 解析PHP跳出循环的方法以及continue、break、exit的区别介绍

    本篇文章是对PHP跳出循环的方法以及continue.break.exit的区别进行了详细的分析介绍,需要的朋友参考下   PHP中的循环结构大致有for循环,while循环,do{} while 循 ...

  5. 地址中如果含有"+",发给服务器时"+"变成了空格问题解析

    如地址为sms:+7 915 444-414-444,含有空格. 服务器解码 URLDecoder.decode("sms:+7 915 444-414-444"),返回的是sms ...

  6. ssh使用笔记

    在集群管理和配置中有很多命令要在各个节点中发送(特别是Master->Worker),大家都不希望发送每一个命令时都输入一次密码,因此常常先配置实现Master无密码登录到所有的Worker节点 ...

  7. git把某个文件去除版本控制

    谢谢@jessicway 同学的提醒.我之前没考虑只需要删除服务器上已提交的文件,但是本地不想删除的情况. 我们先看看 git rm 命令的说明 可以看到其实加上 --cached 参数就可以实现只去 ...

  8. ZR8.2 DP

    DP 1CF1101D 我们发现,最终答案一定和质因数有关 我们发现\(w_i <= 2*10^5\)级别的树,他的素因子的个数不会非常多(\(<=10\)) 然后我们就设 gcd是\(d ...

  9. Next.js 笔记

    NEXT 中文文档地址! next.js 只有服务端使用的包需要做单独处理,无需打包到项目中,可以使用@zeit/next-bundle-analyzer观察代码. Router.beforePopS ...

  10. RocketMQ各组件介绍

    Rocket 架构主要分为4部分: Producer 消息发布者,支持分布式集群部署.Produer 通过 MQ 负载均衡模块选择相应 Broker 中的 queue 进行消息投递,投递过程支持快速失 ...