【codevs1081】【树状数组】区间修改 单点查询
2016-10-18 16:13
381 查看
题目描述 Description
给你N个数,有两种操作1:给区间[a,b]的所有数都增加X
2:询问第i个数是什么?
输入描述 Input Description
第一行一个正整数n,接下来n行n个整数,再接下来一个正整数Q,表示操作的个数. 接下来Q行每行若干个整数。如果第一个数是1,后接3个正整数a,b,X,表示在区间[a,b]内每个数增加X,如果是2,后面跟1个整数i, 表示询问第i个位置的数是多少。输出描述 Output Description
对于每个询问输出一行一个答案样例输入 Sample Input
31
2
3
2
1 2 3 2
2 3
样例输出 Sample Output
5数据范围及提示 Data Size & Hint
1<=n<=1000001<=q<=100000
这个就是修改查询反过来,具体怎么样我也不好说,要自己去体会
然后直接安利你们去看这个:http://blog.csdn.net/u013514722/article/details/40192345
然后贴代码:
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<set> #include<map> #include<queue> #include<algorithm> #include<vector> #include<cstdlib> #include<cmath> #include<ctime> #include<stack> #define INF 2100000000 #define ll long long #define clr(x) memset(x,0,sizeof(x)) #define clrmax(x) memset(x,127,sizeof(x)) #define M 100005 using namespace std; inline int read() { char c; int ret=0,b=0; while(!(c>='0'&&c<='9')) { c=getchar(); if(c=='-')b=1; } while(c>='0'&&c<='9') { ret=(c-'0')+(ret<<1)+(ret<<3); c=getchar(); } if(b)ret=-ret; return ret; } ll tree[M],n; void add(int a,int x) { for(int i=a;i;i-=i&(-i)) tree[i]+=x; } ll find(int a) { ll ret=0; for(int i=a;i<=n;i+=i&(-i)) ret+=tree[i]; return ret; } int main() { freopen("in.txt","r",stdin); scanf("%d",&n); for(int i=1;i<=n;i++) { int x=read(); add(i,x);add(i-1,-x); } int m; scanf("%d",&m); while(m--) { int a; scanf("%d",&a); if(a==1) { int b,c,x; scanf("%d%d%d",&b,&c,&x); add(c,x);add(b-1,-x); } else { int b; scanf("%d",&b); printf("%d\n",find(b)); } } return 0; }
大概就是这个样子,如果有什么问题,或错误,请在评论区提出,谢谢。
相关文章推荐
- codevs 1082 一维树状数组区间修改区间查询
- 【codevs1082】【树状数组】 区间修改 区间查询
- 【算法系列学习】线段树vs树状数组 单点修改,区间查询 [kuangbin带你飞]专题七 线段树 A - 敌兵布阵
- POJ-2763 Housewife Wind (树链剖分 入门题 树状数组 单点修改 区间查询)
- 树状数组模板1——单点修改区间查询
- hdu1166敌兵布阵 (树状数组 单点修改+区间查询)
- HDU 1556-Color the ball(树状数组-区间修改 单点查询)
- 树状数组单点修改区间查询
- 树状数组的区间修改单点查询及Color the ball的AC代码
- POJ2155 Matrix(二维树状数组||区间修改单点查询)
- 树状数组单点更新和区间更新,二维数组poj2155(区间更新,单点查询)(已加入区间修改区间查询)
- 【原创】【数据结构】一维树状数组的基本操作(单点修改,区间查询) (HDU1166 敌兵布阵)
- HUST——1106xor的难题之二(异或树状数组单点修改和区间查询)
- Lightoj 1112 - Curious Robin Hood 【单点修改 + 单点、 区间查询】【树状数组 水题】
- 树状数组 区间修改,单点查询;
- (模板)树状数组 (区间修改,单点查询)
- P3374 【模板】树状数组 1 单点修改与区间查询
- 树状数组的区间修改,单点查询
- POJ 2155-Matrix(二维树状数组-区间修改 单点查询)
- 树状数组(区间修改,单点查询)