AcWing:242. 一个简单的整数问题(树状数组)
给定长度为N的数列A,然后输入M行操作指令。
第一类指令形如“C l r d”,表示把数列中第l~r个数都加d。
第二类指令形如“Q X”,表示询问数列中第x个数的值。
对于每个询问,输出一个整数表示答案。
输入格式
第一行包含两个整数N和M。
第二行包含N个整数A[i]。
接下来M行表示M条指令,每条指令的格式如题目描述所示。
输出格式
对于每个询问,输出一个整数表示答案。
每个答案占一行。
数据范围
1≤N,M≤1051≤N,M≤105,
|d|≤10000|d|≤10000,
|A[i]|≤1000000000|A[i]|≤1000000000
输入样例:
10 5
1 2 3 4 5 6 7 8 9 10
Q 4
Q 1
Q 2
C 1 6 3
Q 2
输出样例:
4
1
2
5
题解:利用树状数组来记录每次改变的值,如果修改[l, r]之间的值,增加val,则令[l, n]加上val,[r + 1, n]减去val,然后查询值得时候,就是用树状数组得查询,然后加上原来数组里面得值就是答案。
#include <iostream>
#include <cstdio> using namespace std; typedef long long ll; const int maxn = 1e5+; ll arr[maxn];
ll tree[maxn];
int n, m; int lowbit(int x) {
return x & (-x);
} void add(int x, ll val) {
while(x <= n) {
tree[x] += val;
x += lowbit(x);
}
} ll ask(int x) {
ll res = ;
while(x >= ) {
res += tree[x];
x -= lowbit(x);
}
return res;
} int main() {
scanf("%d %d", &n, &m);
for(int i = ; i <= n; i++) {
scanf("%lld", &arr[i]);
}
while(m--) {
char str[];
int l, r;
ll val;
scanf("%s", str);
if(str[] == 'Q') {
scanf("%d", &l);
printf("%lld\n", ask(l) + arr[l]);
} else {
scanf("%d%d%lld", &l, &r, &val);
add(l, val); //在[l, n]的区间内增加val
add(r + , -val); //在[r + 1, n]的区间内减少val
}
}
return ;
}
AcWing:242. 一个简单的整数问题(树状数组)的更多相关文章
- AcWing 242. 一个简单的整数问题
		
给定长度为N的数列A,然后输入M行操作指令. 第一类指令形如"C l r d",表示把数列中第l~r个数都加d. 第二类指令形如"Q X",表示询问数列中第x个 ...
 - acwing 243. 一个简单的整数问题2  树状数组  线段树
		
地址 https://www.acwing.com/problem/content/description/244/ 给定一个长度为N的数列A,以及M条指令,每条指令可能是以下两种之一: 1.“C l ...
 - AcWing 243. 一个简单的整数问题2  (树状数组,区间更新/询问)
		
题意:区间更新,区间询问. 题解;对于区间更新,我们还是用差分数组\(b_i\)来更新,区间询问时,我们的答案是:\(\sum_{i=l}^{r}\sum_{j=1}^{i}b_j\), 所以,我们搞 ...
 - BZOJ2683: 简单题(cdq分治 树状数组)
		
Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 2142 Solved: 874[Submit][Status][Discuss] Descripti ...
 - AcWing    244. 谜一样的牛     (树状数组+二分)打卡
		
题目:https://www.acwing.com/problem/content/245/ 题意:有n只牛,现在他们按一种顺序排好,现在知道每只牛前面有几只牛比自己低,牛的身高是1-n,现在求每只牛 ...
 - BZOJ 2683 简单题 cdq分治+树状数组
		
题意:链接 **方法:**cdq分治+树状数组 解析: 首先对于这道题,看了范围之后.二维的数据结构是显然不能过的.于是我们可能会考虑把一维排序之后还有一位上数据结构什么的,然而cdq分治却可以非常好 ...
 - 第k小整数(树状数组)
		
洛谷传送门 入门难度.. 没错,但是我并不是要暴力做. 而是用树状数组来做. 先离散化,然后随便搞一搞就可以了.(晕.比暴力还慢) 如果要查找某一区间的的话可以把区间取出重新建树,然后再求.(更暴力) ...
 - AcWing 243. 一个简单的整数问题2 | 树状数组
		
传送门 题目描述 给定一个长度为N的数列A,以及M条指令,每条指令可能是以下两种之一: 1.“C l r d”,表示把 A[l],A[l+1],…,A[r] 都加上 d. 2.“Q l r”,表示询问 ...
 - zoj1716简单的二维树状数组
		
问一个矩形框在一个大矩形内最多能围几个给定的点 都不用排序,先把所有的点加入树状数组,再直接枚举大矩形的每个格子即可 #include <iostream> #include <st ...
 
随机推荐
- 50道高级sql练习题;大大提高自己的sql能力(附具体的sql)
			
问题及描述:--1.学生表Student(SID,Sname,Sage,Ssex) --SID 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别--2.课程表Course(CID ...
 - Deep Learning方向的paper
			
转载 http://hi.baidu.com/chb_seaok/item/6307c0d0363170e73cc2cb65 个人阅读的Deep Learning方向的paper整理,分了几部分吧,但 ...
 - ASP.NET WEB应用程序(.network4.5)MVC   Razor视图引擎2
			
https://www.bbsmax.com/A/gAJG67OXzZ/ 在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor.在这之前,我们一直在使用WebForm时代沿留下来的ASP ...
 - fastclick插件中存在的bug
			
1.在vue项目中安装fastclick插件 npm install --save fastclick 2.在main.js中引入并绑定到body import FastClick from 'fas ...
 - MyCAT详解【转】
			
原文链接:MyCAT详解 作者:Rangle 一.MyCAT概述MyCAT是一款由阿里Cobar演变而来的用于支持数据库读写分离.分片的分布式中间件.MyCAT可不但支持Oracle.MSSQL.MY ...
 - iOS开发 iOS10推送必看(基础篇)-转
			
iOS10更新之后,推送也是做了一些小小的修改,下面我就给大家仔细说说.希望看完我的这篇文章,对大家有所帮助. 一.简单入门篇---看完就可以简单适配完了 相对简单的推送证书以及环境的问题,我就不在这 ...
 - bash shell的ANSI控制
			
格式: echo -e "\033[字背景颜色;字体颜色m字符串\033[0m" 例如: echo -e "\033[41;36m something here \03 ...
 - 13.MyBatis注解式开发
			
mybatis 的注解,主要是用于替换映射文件.而映射文件中无非存放着增.删.改.查 的 SQL 映射标签.所以,mybatis 注解,就是要替换映射文件中的 SQL 标签. mybatis 官方文档 ...
 - 跟着minium官网介绍学习minium-----(三)
			
注意:程序运行时在微信开发者工具当前页面为主,而不是每次运行都是从home页面开始 一 获取单个元素 get_element():在当前页面查询控件, 如果匹配到多个结果, 则返回第一个匹配到的结果 ...
 - Linux命令——mkdir、rmdir
			
mkdir -p:递归创建目录 -v:每次创建新目录都显示信息 -m:直接指定权限(不使用默认umask演算的那个) [root@51cto /]# mkdir /a/b/c -pv mkdir: c ...