Cod sursa(job #1153855)

Utilizator tibi9876Marin Tiberiu tibi9876 Data 25 martie 2014 19:44:54
Problema Arbori de intervale Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<fstream>
using namespace std;

int a[300005],p,x,y,mx,n,m,i,val;

void update(int n,int x,int y,int p)
{
	int m;
	if (x!=y)
	{
		m=(x+y)/2;
		if (p<=m)
		{
			update(n*2,x,m,p);
			a[n]=max(a[2*n],a[2*n+1]);
		}
		else 
		{
			update(n*2+1,m+1,y,p);
			a[n]=max(a[2*n],a[2*n+1]);
		}
	}
	else a[n]=val;
}

void query(int n,int x,int y,int p,int q)
{
	int m;
	if ((p<=x) && (y<=q))
	{
		mx=max(mx,a[n]);
		return;
	}
	if (x!=y)
	{
		m=(x+y)/2;
		if ((y>=p) && (m+1<=q))
			query(n*2+1,m+1,y,p,q);
		if ((x<=q) && (m>=p))
			query(n*2,x,m,p,q);
	}
}
		

int main()
{
	ifstream f("arbint.in");
	ofstream g("arbint.out");
	ios_base::sync_with_stdio(0);
	f >> n >> m;
	for (i=1;i<=n;i++)
	{
		f >> val;
		update(1,1,n,i);
	}
	for (i=1;i<=m;i++)
	{
		f >> p >> y >> val;
		if (p==1)
			update(1,1,n,y);
		else 
		{
			mx=0;
			query(1,1,n,y,val);
			g << mx << "\n";
		}
	}
}