Pagini recente » Cod sursa (job #450104) | Cod sursa (job #1338859) | Cod sursa (job #1697401) | Cod sursa (job #1638054) | Cod sursa (job #3139291)
#include <stdio.h>
#include <stdlib.h>
#define zeros(x) ( (x^(x-1))&x )
int n, AIB[15000];
void Add(int x, int quantity)
{
int 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 *fin, *fout;
int x,m,i,tip,a,b;
fin=fopen("datorii.in", "r");
fscanf(fin, "%d %d", &n, &m);
for(i=1; i<=n; i++){
fscanf(fin, "%d", &x);
Add(i, x);
}
fout=fopen("datorii.out", "w");
for(i=0; i<m; i++){
fscanf(fin, "%d %d %d", &tip, &a, &b);
if(tip==1){
fprintf(fout, "%d\n", (Compute(b) - Compute(a-1)));
}
else{
Add(a, -b);
}
}
fclose(fin);
fclose(fout);
return 0;
}