Cod sursa(job #379316)

Utilizator GotenAmza Catalin Goten Data 31 decembrie 2009 19:10:59
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<fstream.h>

int ai[1<<17],r,x,y;

void update(int nod, int left, int right)
{
	if(left==right)
		ai[nod]=y;
	else
	{
		int m=(left+right)/2,nod1=2*nod,nod2=1+nod1;
		if(x<=m)
			update(nod1,left,m);
		else
			update(nod2,m+1,right);
		if(ai[nod1]<ai[nod2])
			ai[nod]=ai[nod2];
		else
			ai[nod]=ai[nod1];
	}
}

void query(int nod, int left, int right)
{
	if(x<=left&&right<=y)
	{
		if(r<ai[nod])
			r=ai[nod];
	}
	else
	{
		int m=(left+right)/2,nod1=2*nod,nod2=1+nod1;
		if(x<=m)
			query(nod1,left,m);
		if(m<y)
			query(nod2,m+1,right);
	}
}


int main()
{
	int n,m,op;
	ifstream f("arbint.in");
	ofstream g("arbint.out");
	f>>n>>m;
	for(x=1;x<=n;x++)
	{
		f>>y;
		update(1,1,n);
	}
	while(m--)
	{
		f>>op>>x>>y;
		if(op)
			update(1,1,n);
		else
		{
			r=-1;
			query(1,1,n);
			g<<r<<'\n';
		}
	}
	return 0;
}