Cod sursa(job #500792)

Utilizator shitprogrammingProgramming Shit shitprogramming Data 13 noiembrie 2010 09:53:18
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <stdio.h>

int x,y,c,n,m,i;
int arb[300000];

void add(int nod,int L,int R)
{
	int M;
	if(L==x&&x==R) arb[nod]=y;
	else
	{
		M=(L+R)/2;
		if(x<=M) add(2*nod,L,M);
		else
		if(M<x) add(2*nod+1,M+1,R);
		arb[nod]=arb[2*nod];
		if(arb[nod]<arb[2*nod+1]) arb[nod]=arb[2*nod+1];
	}
}

int src(int nod,int L,int R)
{
	int M,aux1=0,aux2=0;
	if(x<=L&&R<=y) return arb[nod];
	else
	{
		M=(L+R)/2;
		if(x<=M) aux1=src(2*nod,L,M);
		if(M<y) aux2=src(2*nod+1,M+1,R);
		if(aux1>aux2) return aux1;
		else return aux2;
	}
}

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

	scanf("%d%d",&n,&m);
	
	for(x=1;x<=n;x++)
	{
		scanf("%d",&y);
		add(1,1,n);
	}

	for(i=1;i<=m;i++)
	{
		scanf("%d%d%d",&c,&x,&y);
		switch(c)
		{
			case 0:
				printf("%d\n",src(1,1,n));
				break;
			case 1:
				add(1,1,n);
				break;
		}
	}
	return 0;
}