Pagini recente » Cod sursa (job #245013) | Cod sursa (job #1139016) | Cod sursa (job #68691) | Cod sursa (job #1410586) | Cod sursa (job #526208)
Cod sursa(job #526208)
#include<stdio.h>
#include<math.h>
FILE *in,*out;
int V[15001],tip,poz,val,C[15001],i,n,m,k,aux;
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",&V[i]);
for(i=1;i<=n;i++)
{
k=0,aux=i;
while( !(aux%2) )
{
k++;
aux/=2;
}
int q=pow(2,k);
for(int j=i-q+1;j<=i;j++)
C[i]+=V[j];
}
for(i=1;i<=m;i++)
{
fscanf(in,"%d",&tip);
if( !tip )
{
fscanf(in,"%d %d",&poz,&val);
while(poz<=n)
{
C[poz]-=val;
k=0;
aux=poz;
while( !(aux%2) )
{
k++;
aux/=2;
}
poz+=pow(2,k);
}
}
else
{
int st=0,dr=0,sumast=0,sumadr=0;
fscanf(in,"%d %d",&st,&dr);
st--;
while(st>0)
{
sumast+=C[st];
aux=st;
k=0;
while( !(aux%2) )
{
k++;
aux/=2;
}
st-=pow(2,k);
}
while(dr>0)
{
sumadr+=C[dr];
aux=dr;
k=0;
while( !(aux%2) )
{
k++;
aux/=2;
}
dr-=pow(2,k);
}
fprintf(out,"%d\n",sumadr-sumast);
}
}
return 0;
}