【cogs247】售票系统【线段树】
售票系统
输入文件: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”,表示当前的售票申请被受理或不被受理。
【输入输出样例】
Sample Input:
4 6 4
1 4 2
1 3 2
2 4 3
1 2 3
Sample Output:
YES
YES
NO
NO
线段树+lazy标记
代码如下:
#include <iostream>
#include <cstdio>
using namespace std;
struct SegTreeNode {
int lc, rc, lazy, sum;
} SegTree[600001 * 4];
int C, S, R;
void Build(int root, int l, int r)
{
SegTree[root].lc = l, SegTree[root].rc = r;
if (l == r)
{
SegTree[root].sum = 0;
return;
}
int mid = (l + r) / 2;
Build(root * 2, l, mid);
Build(root * 2 + 1, mid + 1, r);
SegTree[root].sum = max(SegTree[root * 2].sum, SegTree[root * 2 + 1].sum);
}
void pushdown(int root)
{
int lc = root * 2, rc = root * 2 + 1;
SegTree[lc].lazy += SegTree[root].lazy;
SegTree[rc].lazy += SegTree[root].lazy;
SegTree[lc].sum += SegTree[root].lazy;
SegTree[rc].sum += SegTree[root].lazy;
SegTree[root].lazy = 0;
}
void Modify(int root, int l, int r, int val)
{
if (l == SegTree[root].lc && r == SegTree[root].rc)
{
SegTree[root].lazy += val;
SegTree[root].sum += val;
return;
}
pushdown(root);
int mid = (SegTree[root].lc + SegTree[root].rc) / 2;
if (r <= mid) Modify(root * 2, l, r, val);
else if (l > mid) Modify(root * 2 + 1, l, r, val);
else Modify(root * 2, l, mid, val), Modify(root * 2 + 1, mid + 1, r, val);
SegTree[root].sum = max(SegTree[root * 2].sum, SegTree[root * 2 + 1].sum);
}
int Query(int root, int l, int r)
{
if (l == SegTree[root].lc && r == SegTree[root].rc) return SegTree[root].sum;
pushdown(root);
int mid = (SegTree[root].lc + SegTree[root].rc) / 2;
if (r <= mid) return Query(root * 2, l, r);
else if (l > mid) return Query(root * 2 + 1, l, r);
else
{
int p1 = Query(root * 2, l, mid), p2 = Query(root * 2 + 1, mid + 1, r);
return max(p1, p2);
}
}
int main()
{
ios::sync_with_stdio(false);
freopen("railway.in", "r", stdin);
freopen("railway.out", "w", stdout);
cin >> C >> S >> R;
Build(1, 1, C);
for (int i = 1; i <= R; i++)
{
int O, D, N, res=INT_MAX;
cin >> O >> D >> N;
D--;//这里一定要减一
res = Query(1, O, D);
if (res <= S - N) Modify(1, O, D, N);
if (res <= S - N) cout << "YES" << endl;
else cout << "NO" << endl;
}
return 0;
}
【cogs247】售票系统【线段树】的更多相关文章
- COGS247. 售票系统[线段树 RMQ]
247. 售票系统 ★★☆ 输入文件:railway.in 输出文件:railway.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] 某次列车途经C个城市,城市 ...
- cogs 247. 售票系统 线段树
247. 售票系统 ★★☆ 输入文件:railway.in 输出文件:railway.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] 某次列车途经C个城市,城市 ...
- 【cogs247】售票系统
[问题描述] 某次列车途经C个城市,城市编号依次为1到C,列车上共有S个座位,铁路局规定售出的车票只能是坐票, 即车上所有的旅客都有座.售票系统是由计算机执行的,每一个售票申请包含三个参数,分别用O. ...
- 【BZOJ 1901】Zju2112 Dynamic Rankings &&【COGS 257】动态排名系统 树状数组套线段树
外面是树状数组,里面是动态开点线段树,对于查询我们先把有关点找出来,然后一起在线段树上行走,这样就是单个O(log2)的了 #include <cstdio> #include <v ...
- P1243~P1247 线段树模板题总结
前言 这几天刚刚刷了5道线段树(水)题,现在来总结一下. 首先是犯的不少错误: 1.建树.更新函数没有return.这是最气的,每次最后程序错误查了半天也没查出来,最后发现是没有return.递归边界 ...
- bzoj3932--可持久化线段树
题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...
- 【听说是线段树】bzoj1012 [JSOI2008]最大数maxnumber
一眼看题目吓了一跳:这TM不就是单调队列吗,200000又怎样,大不了我二分嘛 系统提示:成功开启 手残模式 开始瞎写: #include <cstdio> ]; ]; int m,mod ...
- 树(一)——线段树
问题 现在有1~30这30个数,数N被抽上的概率正比于1/sqrt(N+1),求满足这个概率分布的随机数发生器. 思路 第一,如何解决这个"概率正比"问题. 第二,如何产生满足条件 ...
- 线段树好题(2004集训队林涛PPT中的3题)
1.snake:主要是要意识到全局的可能连法只有一种= =(略坑,题目的最小长度是唬人的……),所以关键就是能否构造出符合题意的图,可以考虑搜索解决,搜出一个就OK了,但是会发现那些满足条件中线段在非 ...
随机推荐
- CSS——img自适应div大小
代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <tit ...
- centos7多网卡配置bond0 (mode6无需交换机做配置)
1.执行setup命令-->网络配置-->本例中四块网卡. 2.ifconfig列出四块网卡. 3.我们的目标,绑定eth0和eth1两块网卡作为公网网卡,ip设置为192.168.0.5 ...
- Object.prototype的成员介绍
3.Object.prototype的成员介绍 Object.prototype是js中所有的对象的祖宗 Object.prototype中所有的成员都可以被js中所有的对 ...
- Fizz Buzz 面试题
在CSDN上看到一篇文章<软件工程师如何笑着活下去>,本来是想看对这个行业的一些评价和信息,不曾检索到关于Fizz Buzz的面试题,上网搜了一下,顿感兴趣.留下此文,以表回忆. java ...
- VB代码收集
1.随机获取5位验证码? 需求: 创建一个Label1:名称为随机验证码生成 创建一个Label2:名称为为空,属性BorderStyle=1 创建一个CommandButton:名称为获取随机码 代 ...
- php项目命名规范
命名规范 ThinkPHP5遵循PSR-2命名规范和PSR-4自动加载规范,并且注意如下规范: 目录和文件 目录使用小写+下划线: 类库.函数文件统一以.php为后缀: 类的文件名均以命名空间定义,并 ...
- 关于spring boot中的pageHelper的mybatis插件使用
先引入pageHelper依赖: <dependency> <groupId>com.github.pagehelper</groupId> ...
- xshell终端向远程服务器上传文件方法
centos-7下在本地终端里向远程服务器上传文件,在命令行中执行的软件. 安装命令如下: 在终端里输入如下命令: 会弹出如下窗口 选择你要上传的文件即可上传成功.
- html知识点汇总(持续更新中)
本人从事前端行业三年多,打算从今天开始整理一些关于前端的一些比较经典的知识点,持续更新中...希望能对一些相关知识点有疑问的朋友有一些帮助! HTML篇: 1.常见的行内元素/块级元素/空元素有哪些? ...
- SP913 QTREE2 - Query on a tree II
思路 第一个可以倍增,第二个讨论在a到lca的路径上还是lca到b的路径上, 倍增即可 代码 #include <cstdio> #include <algorithm> #i ...