Cod sursa(job #410911)

Utilizator GotenAmza Catalin Goten Data 4 martie 2010 17:25:10
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<fstream.h>
int a,b,r,v[100100],ai[400400];
void update(int nod, int st, int dr)
{
	if(st==dr)
		ai[nod]=v[a];
	else
	{
		int m=(st+dr)>>1,ls=(nod<<1),rs=1+ls;
		if(a<=m)
			update(ls,st,m);
		else
			update(rs,m+1,dr);
		if(ai[rs]>ai[ls])
			ai[nod]=ai[rs];
		else
			ai[nod]=ai[ls];
	}
}
void query(int nod, int st, int dr)
{
	if(a<=st&&dr<=b)
	{
		if(r<ai[nod])
			r=ai[nod];
	}
	else
	{	
		int m=(st+dr)>>1,ls=(nod<<1),rs=1+ls;
		if(a<=m)
			query(ls,st,m);
		if(m<b)
			query(rs,m+1,dr);
	}
}	
int main()
{
	int op,n,m;
	ifstream f("arbint.in");
	ofstream g("arbint.out");
	f>>n>>m;
	for(a=1;a<=n;a++)
	{
		f>>v[a];
		update(1,1,n);
	}
	while(m--)
	{
		f>>op>>a>>b;
		if(!op)
		{
			r=-1;
			query(1,1,n);
			g<<r<<'\n';
		}
		else
		{
			v[a]=b;
			update(1,1,n);
		}
	}
	return 0;
}