树状数组板子(维护前缀和)
#include<iostream> #include<cmath> #include<algorithm> #include<cstring> #include<queue> using namespace std; typedef long long ll; const int NS=5e5+5; int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}}; int tree[NS]; int sum[NS]; int lowbit(int t) { return t&(-t); } void update(int x,int y,int n) { for(int i=x;i<=n;i+=lowbit(i)) tree[i]+=y; } int query (int z) { long long sum=0; for(int i=z;i>=1;i-=lowbit(i)) sum+=tree[i]; return sum; } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n,m; cin>>n>>m; for(int i=1;i<=n;i++) {cin>>sum[i];} while(m--) { int a,x,y,z; cin>>a; if(a==1) { cin>>x>>y>>z; update(x,z,n); update(y+1,-z,n); } else { cin>>z; cout<<sum[z]+query(z)<<'\n'; } } }