Pagini recente » Cod sursa (job #120020) | Cod sursa (job #2726668) | Cod sursa (job #1464408) | Cod sursa (job #714563) | Cod sursa (job #332438)
Cod sursa(job #332438)
#include<stdio.h>
#include<stdlib.h>
long int *c;
int n;
long int suma(int i)
{
int p;
long int s=0;
while(i>0)
{
s+=c[i];
p=1;
while(i%(2*p)==0) p*=2;
i-=p;
}
return s;
}
void adauga(int x, int i)
{
int p;
while(i<=n)
{
c[i]+=x;
p=1;
while(i%(2*p)==0) p*=2;
i+=p;
}
}
int main()
{
FILE *f,*g;
int m,i,x,y,z;
f=fopen("datorii.in","r");
g=fopen("datorii.out","w");
fscanf(f,"%d%d",&n,&m);
c=(long int*)calloc(n+1,sizeof(long int));
for(i=1;i<=n;i++)
{
fscanf(f,"%d",&x);
adauga(x,i);
}
for(i=0;i<m;i++)
{
fscanf(f,"%d%d%d",&x,&y,&z);
if(x==0) adauga(-z,y);
else fprintf(g,"%ld\n",suma(z)-suma(y-1));
}
fclose(f);
fclose(g);
return 0;
}