Cod sursa(job #832830)

Utilizator krissu93FMI Tiugan Cristiana Elena krissu93 Data 11 decembrie 2012 16:03:10
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <fstream>
#include <iostream>
using namespace std;

int arb[400000];
int v[100000];
int n,m,val,pos,a,b;
int l,r;
int max1;
ifstream in("datorii.in");
ofstream out("datorii.out");



void actualizeaza(int st, int dr, int nod)
{
	if (st==dr)
	{
		arb[nod]=val;
	return;
	}
	else
	{
		int mij=(st+dr)/2;
		if (pos<=mij) 
			actualizeaza(st,mij,2*nod);
		else
			actualizeaza(mij+1,dr,2*nod+1);
		arb[nod]=arb[2*nod]+arb[2*nod+1];
	}
}

void intreaba(int st, int dr, int nod)
{
	if ( (l<=st) && (dr<=r) ) 
	{
		 max1+=arb[nod];
		return  ;
	}
	else
	{
	int mij=(st+dr)/2;
	if (l<=mij)
		intreaba(st,mij,2*nod);
	if (r>mij)
		intreaba(mij+1,dr,2*nod+1);
	}
}

int main()
{
	in>>n;
	in>>m;
	int i;
	for (i=1;i<=n;i++)
	{
		in>>val;
		pos=i;
		v[i]=val;
		actualizeaza(1,n,1);
	}
	int t;
	
	while (m)
	{
		in>>t>>a>>b;
		if (t==0)
		{
			pos=a;
			v[pos]=v[pos]-b;
			val=v[pos];
			actualizeaza(1,n,1);
			/*for (i=1;i<=2*n;i++) out<<arb[i]<<' ';
			out<<'\n';*/
		}
		else
		{	max1=0;
			l=a;
			r=b;
			intreaba(1,n,1);
			out<<max1<<"\n";
		}
		m--;
	}
	return 0;
	
}