(模板)树状数组 (区间修改,单点查询)
2018-03-13 18:07
387 查看
引入一个叫做查分数组的东西,感觉思想有点像lazytab。区间[l,r]所有值+k改成”位置l加上k,位置r+1减去k”
查询的时候直接查询sum(x)就行;(参考题目:洛谷P3386)
查询的时候直接查询sum(x)就行;(参考题目:洛谷P3386)
#include<cstdio> #include<iostream> using namespace std; typedef long long ll; const int maxn = 500050; int a[maxn], c[maxn],n;//a是原始数组,c是差分数组 int sum(int i)//这两个函数与原始版的树状数组是一样的,只不过里面操作的是差分数组 { int s = 0; while (i) { s += c[i]; i -= i&-i; } return s; } void add(int i, int x) { while (i <= n) { c[i] += x; i += i&-i; } } int main(void) { int m, i, j; cin >> n >> m; for (i = 1; i <= n; i++) scanf("%d", &a[i]); for (i = 1; i <= m; i++) { int e, f, c, d; scanf("%d", &e); if (e == 1) { scanf("%d %d %d", &f, &c, &d); add(f, d); add(c + 1, -d); } else { scanf("%d", &f); printf("%d\n", a[f] + sum(f));//记得加上原来的数组 } } return 0; }
相关文章推荐
- CS Academy Round #30 (Div. 2 only) C.Constant Sum(树状数组,区间修改,单点查询模板)
- P3374 【模板】树状数组 1 单点修改与区间查询
- 树状数组模板1——单点修改区间查询
- 树状数组模板2——区间修改,单点查询
- 树状数组模板(max,min,区间和,区间修改,单点查询)
- 树状数组的区间修改,单点查询
- POJ2155 Matrix(二维树状数组||区间修改单点查询)
- 树状数组(单点修改区间查询、区间修改单点查询、区间修改区间查询)
- 【算法系列学习】线段树vs树状数组 单点修改,区间查询 [kuangbin带你飞]专题七 线段树 A - 敌兵布阵
- hdu1166敌兵布阵 (树状数组 单点修改+区间查询)
- 【原创】【数据结构】一维树状数组的基本操作(单点修改,区间查询) (HDU1166 敌兵布阵)
- 树状数组-单点修改区间查询-区间修改单点查询-区间修改区间查询
- nyoj 123 士兵杀敌(四) 树状数组【单点查询+区间修改】
- 树状数组单点更新和区间更新,二维数组poj2155(区间更新,单点查询)(已加入区间修改区间查询)
- hdu 2642 二维树状数组 单点更新区间查询 模板水题
- 树状数组(二叉索引树 BIT Fenwick树) *【一维基础模板】(查询区间和+修改更新)
- Lightoj 1112 - Curious Robin Hood 【单点修改 + 单点、 区间查询】【树状数组 水题】
- Matrix 二维树状数组 区间修改+单点查询
- 树状数组 区间修改,单点查询;
- Flowers(树状数组+区间更新+单点查询+区间更新单点查询模板)