Pagini recente » Cod sursa (job #2505933) | Cod sursa (job #2479257) | Cod sursa (job #75169) | Cod sursa (job #2643219) | Cod sursa (job #481371)
Cod sursa(job #481371)
#include<stdio.h>
#include<string.h>
#define MAXN 15000
#define infile "datorii.in"
#define outfile "datorii.out"
int A[MAXN];
int C[MAXN];
FILE *f,*g;
int m,n;
int trail_zero(int x)
{
int ret = 1;
while(x&1){
ret<<=1;
x>>=1;
}
return ret;
}
void del(int poz,int val)
{
while(poz<=n){
C[poz-1] -= val;
poz += trail_zero(poz);
}
}
void add(int poz,int val)
{
while(poz<=n){
C[poz-1] += val;
poz += trail_zero(poz);
}
}
int val_to_x(int poz)
{
int ret = 0;
if(poz == 0)
return ret;
while(poz>=1){
ret += C[poz-1];
poz -= trail_zero(poz);
}
return ret;
}
void query(int a, int b)
{
int x = val_to_x(b) - val_to_x(a - 1);
fprintf(g,"%d\n",x);
}
void init()
{
int i;
memset(C,0,n);
for(i = 0; i < n; ++i)
add(i+1,A[i]);
}
int main()
{
int i,op,a,b;
f = fopen(infile,"r");
g = fopen(outfile,"w");
fscanf(f,"%d%d",&n,&m);
for(i = 0; i < n; ++i)
fscanf(f,"%d",(A + i));
init();
while(m){
--m;
fscanf(f,"%d%d%d",&op,&a,&b);
if(op == 0)
del(a,b);
else
query(a,b);
}
fclose(f);
fclose(g);
return 0;
}