Cod sursa(job #1153846)

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

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

void update(int n,int x,int y,int p,int val)
{
	int m;
	if (x!=y)
	{
		m=(x+y)/2;
		if (p<=m)
		{
			update(n*2,x,m,p,val);
			a[n]=max(a[2*n],a[2*n+1]);
		}
		else 
		{
			update(n*2+1,m+1,y,p,val);
			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;
	}
	m=(x+y)/2;
	if (x!=y)
	{
		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 >> x;
		update(1,1,n,i,x);
	}
	for (i=1;i<=m;i++)
	{
		f >> p >> x >> y;
		if (p==1)
			update(1,1,n,x,y);
		else 
		{
			mx=0;
			query(1,1,n,x,y);
			g << mx << "\n";
		}
	}
}