时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte

描述

Byteotian州铁道部决定赶上时代,为此他们引进了城市联网。假设城市联网顺次连接着n 个市从1 到n 编号(起始城市编号为1,终止城市编号为n)。每辆火车有m个座位且在任何两个运送更多的乘客是不允许的。电脑系统将收到连续的预订请求并决定是否满足他们的请求。当火车在请求的路段上有足够的空位时,就通过这个请求,否则不通过。通过请求的一部分是不允许的通过一个请求之后,火车里的空位数目将得到更新。请求应按照收到的顺序依次处理。计算哪些请求可以通过,哪些请求不能通过。

输入

输入数据有多组以EOF结束。每组数据第一行是三个被空格隔开整数n, m 和 r (1<=n<=60 000, 1<=m<=60 000,1<=r<=60 000)。数字分别表示:铁路上的城市个数,火车内的座位数,请求的数目。接下来r 行是连窜的请求。第i+1 行描述第i 个请求。描述包含三个整数k1、k2 和 v (1<=k1<k2<=n, 1<=v<=m)。它们分别表示起点车站的编号,目标车站的编号,座位的需求数。

输出

输出r行,每行一个字符。'Yes'表示可以通过;'No'表示不能通过。每组输出后面有一个空行。

样例输入

4 6 4
1 4 2
1 3 2
2 4 3
1 2 3

样例输出

Yes
Yes
No
No

假设输入为x,y,z表示在[x,y]站之间需要z个座位

线段树维护区间最小值,初始全设为m

每次判断[x,y)区间内最小值>=z则满足,更新区间[x,y)

更新和判断的区间都是[x,y-1],虽然买的是[x,y],但是最后一站下车,座位是空着的

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 using namespace std;
 5
 6 const int MAXN=6e4+5,INF=0x3f3f3f3f;
 7 int st[MAXN<<2],lazy[MAXN<<2];
 8 int n,m;
 9
10 void pushup(int rt){
11     st[rt]=min(st[rt<<1],st[rt<<1|1]);
12 }
13
14 void pushdown(int rt){
15     if(lazy[rt]==0)return;
16     lazy[rt<<1]+=lazy[rt];
17     lazy[rt<<1|1]+=lazy[rt];
18     st[rt<<1]-=lazy[rt];
19     st[rt<<1|1]-=lazy[rt];
20     lazy[rt]=0;
21 }
22
23 void build(int l,int r,int rt){
24     st[rt]=m;
25     lazy[rt]=0;
26     if(l==r){
27         st[rt]=m;
28         return;
29     }
30     int mid=(l+r)>>1;
31     pushdown(rt);
32     build(l,mid,rt<<1);
33     build(mid+1,r,rt<<1|1);
34     pushup(rt);
35 }
36
37 void update(int L,int R,int val,int l,int r,int rt){
38     if(L<=l&&r<=R){
39         lazy[rt]+=val;
40         st[rt]-=val;
41         return;
42     }
43     pushdown(rt);
44     int mid=(l+r)>>1;
45     if(L<=mid)update(L,R,val,l,mid,rt<<1);
46     if(R>mid)update(L,R,val,mid+1,r,rt<<1|1);
47     pushup(rt);
48 }
49
50 int query(int L,int R,int l,int r,int rt){
51     if(L<=l&&r<=R)return st[rt];
52     pushdown(rt);
53     int mid=(l+r)>>1,res=INF;
54     if(L<=mid)res=min(res,query(L,R,l,mid,rt<<1));
55     if(R>mid)res=min(res,query(L,R,mid+1,r,rt<<1|1));
56     pushup(rt);
57     return res;
58 }
59
60 int main(){
61     int r,x,y,z;
62     while(~scanf("%d%d%d",&n,&m,&r)){
63         build(1,n,1);
64         while(r--){
65             scanf("%d%d%d",&x,&y,&z);
66             if(query(x,y-1,1,n,1)>=z){
67                 printf("Yes\n");
68                 update(x,y-1,z,1,n,1);
69             }
70             else printf("No\n");
71         }
72         printf("\n");
73     }
74 }

转载于:https://www.cnblogs.com/ChangeG1824/p/11508581.html

tzoj3315 买火车票(线段树+区间修改+区间查询)相关推荐

  1. python:线段树区间修改 + 区间查询 模板 + 坑点总结

    from functools import reduceclass SegTree:'''支持增量更新,覆盖更新,序列更新,任意RMQ操作基于二叉树实现初始化:O(1)增量更新或覆盖更新的单次操作复杂 ...

  2. HDU 1698 Just a Hook (线段树区间修改+区间查询)

    题目链接: 传送门 题意:Pudge对装备钩子进行若干次的强化,强化分为三种分别对应的价值是1,2,3,在经历过若干次操作后,输出钩子对应的总价值,每次强化都是对钩子进行区间修改 解题思路:在明白了题 ...

  3. TZOJ 3315 买火车票(线段树区间最小值)

    描述 Byteotian州铁道部决定赶上时代,为此他们引进了城市联网.假设城市联网顺次连接着n 个市从1 到n 编号(起始城市编号为1,终止城市编号为n).每辆火车有m个座位且在任何两个运送更多的乘客 ...

  4. 【模板】线段树区间修改

    区间修改: 区间修改过程类似于区间询问,例如将[ul, ur]内的所有元素都加上v,则进行如下操作: 当当前区间被区间[ul, ur]所包含时, 当前的节点值加上区间长度(r - l  + 1)乘以v ...

  5. hdu1698(线段树/区间修改/求和)

    hdu1698"Just a Hook" 题意: 有一个区间s [1,n],每一节si的初始价值为1.定义操作:x y val,将区间[x,y]中的每一个小节的价值改为val.问: ...

  6. POJ 2777 Count Color (线段树区间修改 + 状态压缩)

    题目链接:POJ 2777 Count Color [题目大意] 给你 n 块板子, 编号1--n , 板子的颜色最多30种, 初始时  板子的颜色都是 1: 有两种操作 1 .把给定区间的板子染成一 ...

  7. 1631 小鲨鱼在51nod小学(线段树区间修改+单点查询:不用下传lazy的区间修改)

    题目描述: 1631 小鲨鱼在51nod小学 鲨鱼巨巨2.0(以下简称小鲨鱼)以优异的成绩考入了51nod小学.并依靠算法方面的特长,在班里担任了许多职务. 每一个职务都有一个起始时间A和结束时间B, ...

  8. poj3468 线段树区间更新+区间查询

    题目链接: http://poj.org/problem?id=3468 A Simple Problem with Integers Time Limit: 5000MS   Memory Limi ...

  9. codeforces:E2. Array and Segments (Hard version)【线段树 + 区间修改】

    分析 思路很简单 遍历每个作为最大值,然后区间不包含当前最大值的都可以减掉 easy version就可以这样暴力解决 然后求出最大差值 暴力解法 import sys input = sys.std ...

最新文章

  1. R语言使用table1包绘制(生成)三线表、使用单变量分列构建三线表、为指定变量添加单位信息、自定义overall的标签名称
  2. 检查单 2014-06-20-01
  3. SVN代码冲突解决方案小集合
  4. 用GDB调试程序(一)
  5. Linux Kernel TCP/IP Stack — L1 Layer — NIC Controller — SKB
  6. 找出数组中两个只出现一次的数字
  7. 配置Vlan访问控制
  8. 云计算机室局域网时通时断,为什么网上邻居时通时断?
  9. (实战项目一)手机App抓包爬虫
  10. FireMonkey 源码学习(4)
  11. 自己动手用electron+vue开发博客园文章编辑器客户端【一】
  12. linux 上安装 Node.js和npm
  13. pdflib java_pdflib的使用代码
  14. rx560d linux 图形设计,RX560D与560区别对比:RX 560D和RX 560哪个好
  15. 你的成就只能代表着你过去的努力程度
  16. mac抹掉磁盘重装系统未能与服务器取得联系_干活!苹果电脑安装mac系统详细教程...
  17. ispreedSheet ios编辑类似表格界面在ipad上
  18. 焊武帝再爆肝造CPU,软硬件全自研,可玩游戏,基础器件成本不到1000元
  19. 荷兰高性能输出服务器,荷兰服务器国内访问慢,怎么加速?
  20. java--阿拉伯数字转中文数字

热门文章

  1. 核自适应滤波自学第二章
  2. 基于C++实现三维牙齿模型的自动化预处理【100011019】
  3. Java设计模式之——单例模式
  4. css设置字体大小会受分辨影响吗,CSS字体大小设置时的参考(转)
  5. 1069 微博转发抽奖 (20 分)
  6. 离开 Chrome 十年,我都有着怎样的思考!
  7. 【p5.js学习笔记】鼠标交互事件
  8. Docker下使用网桥形式
  9. 简单迷宫,字符化输出
  10. 转:2009汽车世界品牌价值排行榜.