Pagini recente » Cod sursa (job #52793) | Cod sursa (job #2480951) | Cod sursa (job #1646525) | Cod sursa (job #1492121) | Cod sursa (job #526223)
Cod sursa(job #526223)
#include<stdio.h>
#include<math.h>
FILE *in,*out;
int tip,poz,val,C[15001],i,n,m,k,aux,dr,st;
void schimba(int poz, int val)
{
while(poz<=n)
{
C[poz]-=val;
k=0;
aux=poz;
while( !(aux%2) )
{
k++;
aux=aux >> 1;
}
poz+=1 << k;
}
}
int suma(int poz)
{
int sum=0;
while(poz>0)
{
sum+=C[poz];
aux=poz;
k=0;
while( !(aux%2) )
{
k++;
aux/=2;
}
poz-= 1 << k;
}
return sum;
}
int main()
{
in=fopen("datorii.in","rt");
out=fopen("datorii.out","wt");
fscanf(in,"%d %d",&n,&m);
for(i=1;i<=n;i++)
{
fscanf(in,"%d",&val);
schimba(i,-val);
}
for(i=1;i<=m;i++)
{
fscanf(in,"%d",&tip);
if( !tip )
{
fscanf(in,"%d %d",&poz,&val);
schimba(poz,val);
}
else
{
fscanf(in,"%d %d",&st,&dr);
fprintf(out,"%d\n",suma(dr)-suma(st-1));
}
}
return 0;
}