给定长度为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 ;
}

最新文章

  1. 体验报告:微信小程序在安卓机和苹果机上的区别
  2. 豆芽儿 - 高端IT人才成长社区 上线啦!
  3. vs2012中添加lib,.h文件方法(原)
  4. 不错的TOMCAT监控好工具probe
  5. C#连接Oracle简单教程
  6. yii2数据修改|联查
  7. python3和Python2的区别(被坑太久了)
  8. php:兄弟连之面向对象版图形计算器2
  9. javascript 中arguments.callee 调用自身
  10. 【个人笔记】《知了堂》mysql表连接
  11. 虚拟机通信配置与Xshell连接
  12. NetworkExtension
  13. Could not load file or assembly ‘ Oracle.ManagedDataAccess.EntityFramework, Version=6.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342’ or one of its dependencies系统找不到指定文件 处理方法
  14. BZOJ.5248.[九省联考2018]一双木棋chess(对抗搜索 记忆化)
  15. 使用import简化spring的配置 spring import 标签的解析 使用import或加载spring配置时,报错误There is no ID/IDREF 多个Spring配置文件import resource路径配置
  16. 免费的Web服务
  17. maven clean 异常问题
  18. mysql group by 组内排序
  19. [H5表单]一些html5表单知识及EventUtil对象完善
  20. thinking java

热门文章

  1. JS使用MD5加密
  2. sql 触发器里,发生错误,回滚提示错误语句
  3. js中new到底做了什么?
  4. 10.Vue请求远端数据库
  5. 特殊权限 - SUID GUID STICKYBIT
  6. Pytest命令行执行测试
  7. 2018/7/31-zznuoj-问题 A: A + B 普拉斯【二维字符串+暴力模拟+考虑瑕疵的题意-0的特例】
  8. linux的简单了解和使用
  9. JDK源码那些事儿之红黑树基础下篇
  10. a标签中的javascript:void(0)和#的区别