bzoj 4631: 踩气球(线段树)
4631: 踩气球
Time Limit: 10 Sec Memory Limit: 256 MB
Submit: 375 Solved: 189
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
Sample Output
直接线段树单点修改
如果某个区间修改完后权值和为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: 踩气球(线段树)相关推荐
- 【BZOJ-4631】踩气球 线段树 + STL
4631: 踩气球 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 224 Solved: 114 [Submit][Status][Discuss ...
- BZOJ.1558.[JSOI2009]等差数列(线段树 差分)
BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...
- BZOJ 2124 等差子序列 线段树维护哈希
$ \Rightarrow $ 戳我进BZOJ原题 等差子序列 Time Limit: 3 Sec $ \quad $ Memory Limit: 259 MB Description 给一个 $ 1 ...
- BZOJ.3938.Robot(李超线段树)
BZOJ UOJ 以时间\(t\)为横坐标,位置\(p\)为纵坐标建坐标系,那每个机器人就是一条\(0\sim INF\)的折线. 用李超线段树维护最大最小值.对于折线分成若干条线段依次插入即可. 最 ...
- BZOJ 4422 Cow Confinement (线段树、DP、扫描线、差分)
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=4422 我真服了..这题我能调一天半,最后还是对拍拍出来的...脑子还是有病啊 题解: ...
- BZOJ 1135 [POI2009]Lyz 线段树
题意:链接 方法:线段树维护子区间最值. 解析: 我们可以推出来一个式子. 就是如果满足题意的话. 那么任意一个子区间[l,r] f[i]表示穿i的鞋的人数 (r−l+1+d)∗k>=∑f[i] ...
- 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 ...
- bzoj 1503 (权值线段树)
由于蒟蒻实在是ttttttai 菜了,于是开始了学习主席树,权值线段树作为主席树的前置知识,于是蒟蒻各种百度百度,谷歌谷歌,抄网上的代码,然后终于A了这个题目.也还算是有一点收获. 题目:芝麻开门 题 ...
- [FJOI 2016]bzoj 4408 神秘数 - 线段树
题目大意:给你一列数,多次询问用一个区间的数字形成一个可重集合,最小的不能被表示为其一个子集的数字是多少. 题解:考虑给你一个可重集合你怎么算:从小到大排序,假设用前x个数字不能表示的最小都数字是an ...
最新文章
- cookie 和session 的区别详解
- this - 想说爱你不容易
- C#如何判断线程池中所有的线程是否已经完成(转)
- 《Windows CE大排档》第一版勘误表
- 物料分类账业务配置及操作手册
- JSP生成静态HTML页面的实践方法和设计思路
- 初学linux,在Linux上创建c程序并运行!
- 博士在读时,把暗恋的师兄变成了老公是种怎样的体验?
- mysql maria引擎_MySQL/MariaDB---查询缓存与存储引擎
- 解决办法:fatal error: SDL.h: 没有那个文件或目录
- Ubuntu系统下安装Gaussian09和GaussianView5(GS16和GV6安装同理)
- Vue2.0搭建脚手架(vue-cli)
- 详解会议中控系统及其优点特点有哪些?
- requests爬取4399游戏链接
- 工作中,掌握这四个说话技巧,再也不用担心自己不会说话
- java项目编码设置
- USB电路EMC设计标准电路详解
- 车辆占用应急车道识别抓拍系统 opencv
- C Programming学习笔记【谭浩强老师编】(第四章选择结构程序设计)02 逻辑运算符和逻辑表达式
- 计算机语言低下限高上限,2018年各地高考作文嘤酱不负责的胡乱哔哔
热门文章
- python从入门到精通pdf-跟老齐学Python从入门到精通
- python学出来能做什么-python学出来能做什么
- python可以做什么工作-Python入门后,想要从事自由职业可以做哪方面工作?
- python入门指南-Python 30分钟入门指南
- 明年,移动应用开发将出现这八大趋势
- php 禁止浏览器直接访问网页_.php后缀的url地址在浏览器打开怎么不让他下载,而是访问...
- Web API-事件
- vue内容省略表示(超过15位显示...)
- Codeforces Round #753 (Div. 3)E. Robot on the Board 1
- H.264 视频质量评价方法 (基于视频内容)