树状数组模板题。。。
当然也可以用线段树做,不过线段树的常数较大,如果n再大一些卡常。。。
代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=500005; ll n,m,a[N],b[N],z,x,y; void inster(ll x,ll y) { for (;x<=n;x+=(x&-x))b[x]+=y; } ll js(ll x) { ll ans=0; for (;x;x-=(x&-x))ans+=b[x]; return ans; } int main() { scanf("%lld%lld",&n,&m); for (int i=1;i<=n;i++)scanf("%lld",&a[i]); for (int i=1;i<=n;i++)inster(i,a[i]); while (m--) { scanf("%lld%lld%lld",&z,&x,&y); if (z==1)inster(x,y); else printf("%lld ",js(y)-js(x-1)); } }