Pagini recente » Istoria paginii utilizator/twister | Cod sursa (job #607580) | Monitorul de evaluare | Istoria paginii tabele-hash-prezentare-detaliata | Cod sursa (job #1721792)
#include <stdio.h>
#include <stdlib.h>
#define zeros(x) ( (x ^ (x - 1)) & x )
int v[15001],AIB[15001];
long N;
void Add(long x, int quantity)
{
long i;
for (i = x; i <= N; i += zeros(i))
AIB[i] += quantity;
}
int Compute(int x)
{
int i, ret = 0;
for (i = x; i > 0; i -= zeros(i))
ret += AIB[i];
return ret;
}
int main()
{
FILE *f=fopen("datorii.in","r");
FILE *fp=fopen("datorii.out","w");
long i,X,Y,M;
int test;
fscanf(f,"%ld %ld",&N,&M);
//v=(int *)malloc(sizeof(int));
for(i=1;i<=N;i++)
{
//v=(int *)realloc(v,sizeof(int)*(i+1));
fscanf(f,"%d",&v[i]);
Add(i,v[i]);
}
for(i=1;i<=M;i++)
{
fscanf(f,"%d %ld %ld",&test,&X,&Y);
if(test)
{
fprintf(fp,"%d\n",Compute(Y)-Compute(X-1));
}
else
{
Add(X,-Y);
}
}
return 0;
}