Cod sursa(job #250881)

Utilizator vlad2179Popescu Vlad Alexandru vlad2179 Data 1 februarie 2009 02:40:37
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.61 kb
#include<stdio.h>
#define IN "datorii.in"
#define OUT "datorii.out"
#define f(x) ( (x ^ (x - 1)) & x )
int A[15001],n,m;
void adauga(int x, int val){
    int i;
    for (i=x;i<=n;i+=f(i)) A[i]+=val;}
int suma(int x)
{   int i, sum=0;
    for (i=x; i>0;i-=f(i))
        sum+=A[i];
    return sum;
}
int main(){
	FILE *f=fopen(IN,"rt");
	FILE *g=fopen(OUT,"wt");
	fscanf(f,"%d%d",&n,&m);
	int i,o,x,w;
	for(i=1;i<=n;i++){fscanf(f,"%d",&x);adauga(i,x);}
    for(;m--;){
		fscanf(f,"%d%d%d",&o,&x,&w);
		if(!o){ w=-w;adauga(x,w); }
		else { fprintf(g,"%d\n",suma(w) - suma(x-1));
		}
	}
	return 0;
}