题目
给你N个数,有两种操作
1:给区间[a,b]的所有数都增加X
2:询问第i个数是什么?
codevs1081
思路
代码
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <cstring>
#define _for(i,a,b) for(int i = a; i<b; i++)
#define _rep(i,a,b) for(int i = a; i<=b; i++)
using namespace std;
const int maxn = 100000+10;
int n,m,delta[maxn],d[maxn],a[maxn];
int lowbit(int x) { return (x&(-x)); }
void add(int x, int y){
while (x<=n){
delta[x] += y;
x += lowbit(x);
}
}
void addqujian(int l, int r, int x){
add(l, x);
add(r+1,-x);
}
int find(int x){
int res = 0;
while(x){
res+=delta[x];
x-=lowbit(x);
}
return res;
}
int main(){
scanf("%d",&n);
_rep(i,1,n){
scanf("%d",&a[i]);
d[i] = a[i] - a[i-1];
add(i,d[i]);
}
scanf("%d",&m);
int a,l,r,x;
while(m--){
scanf("%d",&a);
if(a==1){
scanf("%d%d%d",&l,&r,&x);
addqujian(l,r,x);
} else {
scanf("%d",&x);
int res = find(x);
printf("%d\n",res);
}
}
return 0;
}