Cod sursa(job #151523)

Utilizator a7893Nae Mihai a7893 Data 8 martie 2008 12:02:22
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<stdio.h>
#define N 100001
int n,m,t[4*N+66],a,b,poz,val,str,fin,maxim;
int max(int a,int b)
{
	return a>b?a:b;
}
void up(int nod,int st,int dr)
{
	if(st==dr)
	{
		t[nod]=val;
		return;
	}
	int mij=(st+dr)/2;
	if(poz<=mij)
		up(2*nod,st,mij);
	else
		up(2*nod+1,mij+1,dr);
	t[nod]=max(t[2*nod],t[2*nod+1]);
}
void que(int nod,int st,int dr)
{
	if(str<=st&&dr<=fin)
	{
		if(maxim<t[nod])
			maxim=t[nod];
		return;
	}
	int mij=(st+dr)/2;
	if(str<=mij)
		que(2*nod,st,mij);
	if(mij<fin)
		que(2*nod+1,mij+1,dr);
}
void solve()
{
	int i,x;
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++)
	{
		scanf("%d",&x);
		poz=i;
		val=x;
		up(1,1,n);
	}
	for(i=1;i<=m;i++)
	{
		scanf("%d%d%d",&x,&a,&b);
		if(x==0)
		{
			maxim=-1;
			str=a;
			fin=b;
			que(1,1,n);
			printf("%d\n",maxim);
		}
		else
		{
			poz=a;
			val=b;
			up(1,1,n);
		}
	}
}
int main()
{
	freopen("arbint.in","r",stdin);
	freopen("arbint.out","w",stdout);
	solve();
	return 0;
}