Cod sursa(job #218590)

Utilizator stinkyStinky si Grasa stinky Data 2 noiembrie 2008 18:24:31
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<stdio.h>
const int N=100010;
int n,v[10*N],poz,val,a,b;

void maxim(int nod,int p,int u){
	if(p==u)
	{
		v[nod]=val;
		return;
	}
	int m=(p+u)/2;
	if(poz<=m)
		maxim(2*nod,p,m);
	else
		maxim(2*nod+1,m+1,u);
	if(v[2*nod]>v[2*nod+1])
		v[nod]=v[2*nod];
	else
		v[nod]=v[2*nod+1];
}

int intreb(int nod,int p,int u){
	if(a<=p && u<=b)
		return v[nod];
	int m=(p+u)/2;
	int x=0,y=0;
	if(m>=a)
		x=intreb(2*nod,p,m);
	if(m+1<=b)
		y=intreb(2*nod+1,m+1,u);
	if(x>y)
		return x;
	return y;
}

void calcul(){
	int tip,m;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;++i){
		scanf("%d",&val);
		poz=i;
		maxim(1,1,n);
	}
	while(m--){
		scanf("%d%d%d",&tip,&a,&b);
		if(tip==0)
			printf("%d\n",intreb(1,1,n));
		else{
			poz=a;
			val=b;
			maxim(1,1,n);
		}
	}
}

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