Cod sursa(job #811672)

Utilizator tibi9876Marin Tiberiu tibi9876 Data 12 noiembrie 2012 19:56:27
Problema Arbori de intervale Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include<fstream>
using namespace std;

int a[300000],i,n,m,x,y,z,s;

void update(int x,int y,int k,int z,int l,int r)
{
	if ((x<=l) && (r<=y))
		a[z]=k;
	else
	{
		int m=(l+r)/2;
		if (x<=m)
			update(x,y,k,2*z,l,m);
		if (y>m)
			update(x,y,k,2*z+1,m+1,r);
		a[z]=max(a[2*z],a[2*z+1]);
	}
}

int query(int x,int y,int z,int l,int r)
{
	int m,p=0,q=0;
	if ((x<=l) && (y>=r))
		return a[z];
	else 
	{
		m=(l+r)/2;
		if (x<=m)
			p=query(x,y,z*2,l,m);
		if (y>m)
			q=query(x,y,z*2+1,m+1,r);
		return max(p,q);
	}
}
		

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