Cod sursa(job #717332)

Utilizator GrimpowRadu Andrei Grimpow Data 19 martie 2012 20:38:26
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<stdio.h>

#define maxN 15005

FILE*f=fopen("datorii.in","r");
FILE*g=fopen("datorii.out","w");

int n,m,i,val,Op,a,b,aib[maxN];

inline int lsb ( int poz ){
	return poz&-poz;
}

inline void update ( int poz , int val ){

	while ( poz <= n ){
		aib[poz] += val;
		poz += lsb(poz);
	}
}

inline int query_sum ( int poz ){
	int s = 0;

	while ( poz ){
		s += aib[poz];
		poz -= lsb(poz);
	}

	return s;
}

inline int query_sum(int a,int b){

	return query_sum(b) - query_sum(a-1);
}

int main () {

	fscanf(f,"%d %d",&n,&m);

	for ( i = 1 ; i <= n ; ++i ){
		fscanf(f,"%d",&val);
		update(i,val);
	}

	for ( i = 1 ; i <= m ; ++i ){
		fscanf(f,"%d %d %d",&Op,&a,&b);

		if ( !Op ){
			update(a,-b);
		}
		else{
			fprintf( g,"%d\n",query_sum(a,b) );
		}
	}

	fclose(f);
	fclose(g);

	return 0;
}