4631: 踩气球

Time Limit: 10 Sec  Memory Limit: 256 MB
Submit: 375  Solved: 189
[Submit][Status][Discuss]

Description

六一儿童节到了, SHUXK 被迫陪着M个熊孩子玩一个无聊的游戏:有N个盒子从左到右排成一排,第i个盒子里装着Ai个气球。
SHUXK 要进行Q次操作,每次从某一个盒子里拿出一个没被踩爆的气球,然后熊孩子们就会立刻把它踩爆。
这M个熊孩子每个人都指定了一个盒子区间[Li, Ri]。 如果某一个时刻,一个熊孩子发现自己选定的盒子区间[Li, Ri]中的所有气球都已经被踩爆了,他就会非常高兴(显然之后他一直会很高兴)。
为了不辜负将自己的任务强行塞给 SHUXK 的那个人的期望, SHUXK 想向你询问: 
他每次操作过后会有多少个熊孩子很高兴。

Input

第一行包含两个正整数N和M,分别表示盒子和熊孩子的个数。
第二行包含N个正整数Ai( 1 < = Ai < = 10^5),表示每个盒子里气球的数量。
以下M行每行包含两个正整数Li, Ri( 1 < = Li < = Ri < = N),分别表示每一个熊孩子指定的区间。
以下一行包含一个正整数Q,表示 SHUXK 操作的次数。
以下Q行每行包含一个正整数X,表示这次操作是从第X个盒子里拿气球。为
了体现在线,我们对输入的X进行了加密。
假设输入的正整数是x',那么真正的X = (x' + Lastans − 1)Mod N + 1。其
中Lastans为上一次询问的答案。对于第一个询问, Lastans = 0。
输入数据保证1 < = x' < = 10^9, 且第X个盒子中有尚未被踩爆的气球。
N < = 10^5 ,M < = 10^5 ,Q < = 10^5

Output

包含Q行,每行输出一个整数,表示 SHUXK 一次操作后询问的
答案。答案的顺序应与输入数据的顺序保持一致。

Sample Input

5 3
1 1 1 1 1
5 5
2 2
1 3
5
4
2
5
2
3

Sample Output

0
1
1
2
3

直接线段树单点修改

如果某个区间修改完后权值和为0,那么包含这个区间的所有熊孩子全部减去这个区间最初的权值和

#include<stdio.h>
#include<vector>
using namespace std;
vector<int> G[444444];
int ans, n, a[100005], tre[444444], val[444444], full[100005];
void Create(int l, int r, int x)
{int m;if(l==r){val[x] = tre[x] = a[r];return;}m = (l+r)/2;Create(l, m, x*2);Create(m+1, r, x*2+1);tre[x] = tre[x*2]+tre[x*2+1];val[x] = val[x*2]+val[x*2+1];
}
void Add(int l, int r, int x, int c, int d, int id)
{int m;if(l>=c && r<=d){full[id] += tre[x];G[x].push_back(id);return;}m = (l+r)/2;if(c<=m)Add(l, m, x*2, c, d, id);if(d>=m+1)Add(m+1, r, x*2+1, c, d, id);
}
void Update(int l, int r, int x, int c, int d)
{int m, i;if(l==r){tre[x] -= d;if(tre[x]==0){for(i=0;i<G[x].size();i++){d = G[x][i];full[d] -= val[x];if(full[d]==0)ans++;}G[x].clear();}return;}m = (l+r)/2;if(c<=m)Update(l, m, x*2, c, d);elseUpdate(m+1, r, x*2+1, c, d);tre[x] = tre[x*2]+tre[x*2+1];if(tre[x]==0){for(i=0;i<G[x].size();i++){d = G[x][i];full[d] -= val[x];if(full[d]==0)ans++;}G[x].clear();}
}
int main(void)
{int m, i, c, d, q;scanf("%d%d", &n, &m);for(i=1;i<=n;i++)scanf("%d", &a[i]);Create(1, n, 1);for(i=1;i<=m;i++){scanf("%d%d", &c, &d);Add(1, n, 1, c, d, i);}scanf("%d", &q);ans = 0;while(q--){scanf("%d", &c);c = (c+ans-1)%n+1;Update(1, n, 1, c, 1);printf("%d\n", ans);}return 0;
}

bzoj 4631: 踩气球(线段树)相关推荐

  1. 【BZOJ-4631】踩气球 线段树 + STL

    4631: 踩气球 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 224  Solved: 114 [Submit][Status][Discuss ...

  2. BZOJ.1558.[JSOI2009]等差数列(线段树 差分)

    BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...

  3. BZOJ 2124 等差子序列 线段树维护哈希

    $ \Rightarrow $ 戳我进BZOJ原题 等差子序列 Time Limit: 3 Sec $ \quad $ Memory Limit: 259 MB Description 给一个 $ 1 ...

  4. BZOJ.3938.Robot(李超线段树)

    BZOJ UOJ 以时间\(t\)为横坐标,位置\(p\)为纵坐标建坐标系,那每个机器人就是一条\(0\sim INF\)的折线. 用李超线段树维护最大最小值.对于折线分成若干条线段依次插入即可. 最 ...

  5. BZOJ 4422 Cow Confinement (线段树、DP、扫描线、差分)

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=4422 我真服了..这题我能调一天半,最后还是对拍拍出来的...脑子还是有病啊 题解: ...

  6. BZOJ 1135 [POI2009]Lyz 线段树

    题意:链接 方法:线段树维护子区间最值. 解析: 我们可以推出来一个式子. 就是如果满足题意的话. 那么任意一个子区间[l,r] f[i]表示穿i的鞋的人数 (r−l+1+d)∗k>=∑f[i] ...

  7. BZOJ[1135][POI2009]Lyz 线段树

    传送门ber~ 如果某时不合法,那一定存在某段满足 (r−l+1+d)∗k<Σl≤i≤rnumi(r−l+1+d)∗k<Σl≤i≤rnumi (r-l+1+d)*k (其中 numinum ...

  8. bzoj 1503 (权值线段树)

    由于蒟蒻实在是ttttttai 菜了,于是开始了学习主席树,权值线段树作为主席树的前置知识,于是蒟蒻各种百度百度,谷歌谷歌,抄网上的代码,然后终于A了这个题目.也还算是有一点收获. 题目:芝麻开门 题 ...

  9. [FJOI 2016]bzoj 4408 神秘数 - 线段树

    题目大意:给你一列数,多次询问用一个区间的数字形成一个可重集合,最小的不能被表示为其一个子集的数字是多少. 题解:考虑给你一个可重集合你怎么算:从小到大排序,假设用前x个数字不能表示的最小都数字是an ...

最新文章

  1. cookie 和session 的区别详解
  2. this - 想说爱你不容易
  3. C#如何判断线程池中所有的线程是否已经完成(转)
  4. 《Windows CE大排档》第一版勘误表
  5. 物料分类账业务配置及操作手册
  6. JSP生成静态HTML页面的实践方法和设计思路
  7. 初学linux,在Linux上创建c程序并运行!
  8. 博士在读时,把暗恋的师兄变成了老公是种怎样的体验?
  9. mysql maria引擎_MySQL/MariaDB---查询缓存与存储引擎
  10. 解决办法:fatal error: SDL.h: 没有那个文件或目录
  11. Ubuntu系统下安装Gaussian09和GaussianView5(GS16和GV6安装同理)
  12. Vue2.0搭建脚手架(vue-cli)
  13. 详解会议中控系统及其优点特点有哪些?
  14. requests爬取4399游戏链接
  15. 工作中,掌握这四个说话技巧,再也不用担心自己不会说话
  16. java项目编码设置
  17. USB电路EMC设计标准电路详解
  18. 车辆占用应急车道识别抓拍系统 opencv
  19. C Programming学习笔记【谭浩强老师编】(第四章选择结构程序设计)02 逻辑运算符和逻辑表达式
  20. 计算机语言低下限高上限,2018年各地高考作文嘤酱不负责的胡乱哔哔

热门文章

  1. python从入门到精通pdf-跟老齐学Python从入门到精通
  2. python学出来能做什么-python学出来能做什么
  3. python可以做什么工作-Python入门后,想要从事自由职业可以做哪方面工作?
  4. python入门指南-Python 30分钟入门指南
  5. 明年,移动应用开发将出现这八大趋势
  6. php 禁止浏览器直接访问网页_.php后缀的url地址在浏览器打开怎么不让他下载,而是访问...
  7. Web API-事件
  8. vue内容省略表示(超过15位显示...)
  9. Codeforces Round #753 (Div. 3)E. Robot on the Board 1
  10. H.264 视频质量评价方法 (基于视频内容)