Pagini recente » Cod sursa (job #1129011) | Cod sursa (job #680597) | Cod sursa (job #1210505) | Cod sursa (job #694723) | Cod sursa (job #2504912)
#include <bits/stdc++.h>
using namespace std;
int v[(1<<20)+5],aint[(1<<20)+5],n,c,m,ind;
const int lim=1003;int u=lim-1; char sir[lim];
void next () {
++u;
if(u==lim)
fread(sir,lim,1,stdin),u=0;
}
void get (int &nr) {
nr=0;
for(;sir[u]<'0' || sir[u]>'9';next());
for(;sir[u]>='0' && sir[u]<='9';next())
nr=nr*10+sir[u]-'0';
}
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];
}
aint[1]=aint[2]+aint[3];
}
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);
get(n);get(m);++m;
for(int i=1;i<=n;++i) {
get(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) {
get(nr1);get(nr2);get(nr3);
if(nr1==0)
updatee(nr2,nr3);
else
printf("%d\n", querrys(nr2,nr3,1,n,1));
}
return 0;
}