Cod sursa(job #148677)

Utilizator crawlerPuni Andrei Paul crawler Data 4 martie 2008 18:11:36
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <stdio.h>

#define Nmax 2000100

int t[Nmax], ret, n,m;

int max(int A,int B)
{
	if (A>B) return A;
	return B;
}

void update(int nod,int st,int dr,int a,int x)
{
	if(a<=st && dr<=a)
	{
		t[nod] = x;
	}
		else
	{
		int mij = (st+dr)/2;
		if(a<=mij) update(nod*2,st,mij,a,x);
		if(a> mij) update(nod*2+1,mij+1,dr,a,x);
		t[nod] = max(t[nod*2],t[nod*2+1]);
	}
}

void search(int nod,int st,int dr,int a,int b)
{
	if (a<=st && dr<=b)
	{
		ret = max(ret,t[nod]);
	}
	 else
	{
		int mij = (st+dr)/2;
		if (a<=mij) search(nod*2,st,mij,a,b);
		if (b >mij) search(nod*2+1,mij+1,dr,a,b);
	}
}



int main()
{
	freopen("arbint.in","r",stdin);
	freopen("arbint.out","w",stdout);

	scanf("%d%d", &n,&m);

	int i,x,a,b;

	for (i=1;i<=n;++i)
	{
		scanf("%d", &x);
		update(1,1,n,i,x);
	}

	for (i=1;i<=m;++i)
	{
		scanf("%d%d%d", &x,&a,&b);
		if (x==0)
		{
			ret=-1;
			search(1,1,n,a,b);
			printf("%d\n", ret);
		}
			else
		{
			update(1,1,n,a,b);
		}
	}

	return 0;
}