樹狀陣列(模板2 區修單查)
阿新 • • 發佈:2018-11-09
luogu 3368
區間修改,單點查詢
差分+樹狀陣列
模板如下:
#include <bits/stdc++.h> #define ll long long #define N 500005 using namespace std; int a[N],c[N]; int n,m; int lowbit(int x) { return x & (-x); } void add(int x,int w) { while(x<=n) { c[x]+=w; x+=lowbit(x); } } ll sum(int x) { ll ret=0; while(x) { ret+=c[x]; x-=lowbit(x); } return ret; } 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 q; scanf("%d",&q); if(q==1) { int x,y,k; scanf("%d%d%d",&x,&y,&k); add(x,k); add(y+1,-k); }else if(q==2) { int x; scanf("%d",&x); printf("%lld\n",sum(x)+a[x]); } } return 0 ; }