Cod sursa(job #500790)

Utilizator shitprogrammingProgramming Shit shitprogramming Data 13 noiembrie 2010 09:48:31
Problema Arbori de intervale Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <stdio.h>

int x,y,c,n,m,i;
int arb[250000],v[100001];

int max(int x,int y)
{
	if(x<y) return y;
	else return x;
}

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]=max(arb[2*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);
		return max(aux1,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);
		v[x]=y;
	}

	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;
}