Cod sursa(job #386646)

Utilizator jeanFMI - Petcu Ion Cristian jean Data 25 ianuarie 2010 16:25:39
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include<stdio.h>
#define Nmax 100010
#define Max(a,b) a>b?a:b

int Arb[2*Nmax],i,n,m,op,p,u,maxim,poz,val;

void update (int nod, int s, int d)
{
	if(s==d)
	{
		Arb[nod]=val;
		return;
	}
	
	int m=(s+d)>>1;
	
	if(poz <= m) update(2*nod,s,m);
	else 		 update(2*nod+1,m+1,d);
	
	Arb[nod]=Max(Arb[2*nod],Arb[2*nod+1]);
}

void query (int nod, int s, int d)
{
	if( p <= s && d <= u )
	{
		if( maxim < Arb[nod] )
			maxim = Arb[nod];
		return;
	}
	
	int m=(s+d)>>1;
	
	if(p <= m)  query(2*nod,s,m);
	if(m <  u)  query(2*nod+1,m+1,d);
}

int main()
{
	freopen("arbint.in","r",stdin);
	freopen("arbint.out","w",stdout);
	
	scanf("%d %d",&n,&m);
	
	for(i=1;i<=n;i++)
	{
		scanf("%d",&val);
		poz=i;
		update(1,1,n);
	}
	
	for(i=1;i<=m;i++)
	{
		scanf("%d %d %d",&op,&p,&u);
		
		if(!op)
		{
			maxim=-1;
			query(1,1,n);
			printf("%d\n",maxim);
		}
		else
		{
			val=u; poz=p;
			update(1,1,n);
		}
	}
	return 0;
}