Pagini recente » Cod sursa (job #2405850) | Cod sursa (job #498441) | Cod sursa (job #2133194) | Cod sursa (job #1533662) | Cod sursa (job #2504899)
#include <bits/stdc++.h>
using namespace std;
int v[(1<<14)+5],aint[(1<<14)+5],n,c,m,ind;
void buildd () {
for(int i=n;i<2*n;++i)
aint[i]=v[i-n+1];
for(int i=n-1;i>0;--i)
aint[i]=aint[2*i]+aint[2*i+1];
}
void updatee (int poz, int nr) {
v[poz]-=nr;
aint[n+poz-1]-=nr;
ind=n+poz-1;
while(ind!=1) {
ind>>=1;
aint[ind]=aint[(ind<<1)]+aint[(ind<<1)+1];
}
}
int querrys (int st, int dr, int cst, int cdr,int indexx) {
if(cst>=st && cdr<=dr)
return aint[indexx];
else {
int mij=(cst+cdr)/2,rez=0;
if(st<=mij)
rez=rez+querrys(st,dr,cst,mij,indexx*2);
if(dr>mij)
rez=rez+querrys(st,dr,mij+1,cdr,2*indexx+1);
return rez;
}
}
int main () {
int nr1,nr2,nr3;
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
scanf("%d%d", &n, &m);++m;
for(int i=1;i<=n;++i) {
scanf("%d", &v[i]);
}
if((n & (n-1))!=0) {
for(c=1;n>0;++c)
if(((1<<c) & n)!=0)
n=(n ^ (1<<c));
n=(1<<(c));
}
buildd();
while(--m) {
scanf("%d%d%d", &nr1, &nr2, &nr3);
if(nr1==0)
updatee(nr2,nr3);
else
printf("%d\n", querrys(nr2,nr3,1,n,1));
}
return 0;
}