Pagini recente » Cod sursa (job #3231440) | Cod sursa (job #1788076) | Cod sursa (job #2208628) | Cod sursa (job #1506326) | Cod sursa (job #61658)
Cod sursa(job #61658)
#include <stdio.h>
#define forn(i,n) for(int i=0;i<n;i++)
#define maxN 66000
FILE*fi,*fo;
int n,m,vec[maxN],umsk;
void inputFunc(){
fi=fopen("datorii.in","r"),fo=fopen("datorii.out","w");
fscanf(fi,"%d %d",&n,&m);
umsk=1;for(int j=n;j;j>>=1)umsk<<=1;
forn(i,n)fscanf(fi,"%d",&vec[umsk+i]);
}
void outputFunc(){
fclose(fi);fclose(fo);
}
int l2(int x){
int res=0;
while(x)res++,x>>=1;
return res;
}
int main(){
for(int i=0;i<60000;i++)vec[i]=vec[i-1];
inputFunc();
for(int i=n+umsk-1;i>1;i--)vec[i>>1]+=vec[i];
forn(q,m){
int op,x,y;
fscanf(fi,"%d %d %d",&op,&x,&y);
if(op){
x=x+umsk-1,y=y+umsk-1;
int sum=vec[y]+vec[x];
for(int tx=x>>1,ty=y>>1; tx!=ty; x=tx,y=ty,tx>>=1,ty>>=1){
if(!(x&1))sum+=vec[x+1];
if(y&1)sum+=vec[y^1];
}
fprintf(fo,"%d\n",sum);
}else{
for(x=x+umsk-1;x;x>>=1)vec[x]-=y;
}
}
outputFunc();
return 0;
}