Cod sursa(job #595164)

Utilizator veleanduAlex Velea veleandu Data 11 iunie 2011 12:54:48
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include<fstream>
using namespace std;
long i,j,s,s2,n,m,t,a,b,lastN;
long AIB[45000];
void fnd ( long st, long dr , long it , long &nod )
{
	long m=(dr-st)/2+st;
	if ( (st==it ) && (dr==it ))
		return ;
	nod*=2;
	if ( m>=it )
		fnd ( st, m , it , nod );
	else
		fnd ( m+1 , dr , it , ++nod );
}

void update ( long nod , long val )
{
	if ( nod == 0 ) 
		return ;
	AIB[nod]+=val;
	update ( nod/2 , val );
}

void quary ( long st, long dr , long cst, long cdr , long &suma , long nod )
{
	long m = (dr-st)/2+st;
	if ( st>=cst && dr <= cdr )
	{
		suma+=AIB[nod];
		return ;
	}
	if ( st>cdr || dr<cst )
		return ;
	nod*=2;
	quary ( st, m , cst , cdr , suma , nod);
	quary ( m+1, dr , cst , cdr , suma , ++nod);
}
int main()
{
	ifstream in("datorii.in");
	ofstream out("datorii.out");
	in>>n>>m;
	for ( i=1; i<=n; ++i )
	{
		in>>t;
		lastN=1;
		fnd ( 1, n, i , lastN);
		update ( lastN , t ); 
	}
	for ( i=1; i<=n; ++i )
	{
		in>>t>>a>>b;
		if ( t==0 )
		{
			lastN=1;
			fnd ( 1, n, a, lastN );
			update ( lastN , (-1)*b );
		}
		else{
			s=0;
			quary( 1 , n , 1 , b , s , 1);
			s2=0;
			quary( 1 , n , 1 , a-1 , s2 , 1);
			out<<s-s2<<"\n";
		}
	}

	return 0;
}