【模板】树状数组 2
2017-01-21 18:15
253 查看
区间修改+单点查询
在[x,y]区间上加k
另开一个数组
在x处+k,y+1处-k
该数组对应位置的前缀和即为改数字的变化量
在[x,y]区间上加k
另开一个数组
在x处+k,y+1处-k
该数组对应位置的前缀和即为改数字的变化量
#include<cstdio> using namespace std; int n,//点数 m,//操作数 C[500003],//树状数组 //树状数组用以求前缀和 a[500003];//原数列 void add(int loc,int value) {//加标记 for(int i=loc;i<=n;i+=i&(-i)) C[i]+=value; } int query(int loc) {//求前缀和/变化量 int ans=0; for(int i=loc;i>0;i-=i&(-i)) ans+=C[i]; return ans; } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;++i) scanf("%d",&a[i]); //读入原数列 for(int i=1;i<=m;++i) { int t; scanf("%d",&t); if(t==1) { //在[x,y]区间上加k int x,y,k; scanf("%d%d%d",&x,&y,&k); add(x,k);add(y+1,-k);//打标记 } else { //查询第k个数 int x; scanf("%d",&x); printf("%d\n",a[x]+query(x)); } } return 0; }
相关文章推荐
- 【模板】树状数组
- 树状数组模板 HDU1166
- 树状数组模板
- ACM_模板_树状数组
- 洛谷 模板 树状数组
- 【模板】树状数组
- 【树状数组】树状数组一维二维模板
- [模板]树状数组(以hdu2352 Stars(一维)/hdu1195 Mobile phones(二维)为例
- 树状数组模板(改点求段 / 该段求点 / 改段求段)
- 洛谷.3374.[模板]树状数组1(CDQ分治)
- 树状数组模板
- 洛谷P3368 【模板】树状数组 2
- 树状数组模板
- 求逆序数模板(树状数组+离散化 || 归并排序法)
- 树状数组模板
- 树状数组模板
- 敌兵布阵 树状数组模板
- 树状数组模板
- 模板 树状数组
- 模板【洛谷P3368】 【模板】树状数组 2