Cod sursa(job #202039)

Utilizator ciprianfFarcasanu Alexandru Ciprian ciprianf Data 5 august 2008 18:33:29
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <stdio.h>
#define N 100001
int n,m,t[3*N],poz,val,sol,a,b,x;
void actual(int p,int u,int i){
	if(p==u){
		t[i]=val;
		return ;
	}
	int m=(p+u)>>1;
	
	if(poz<=m) actual(p,m,2*i);
	else actual(m+1,u,2*i+1);
	
	if(t[2*i]>t[2*i+1])
		t[i]=t[2*i];
	else t[i]=t[2*i+1];
}
void maxim(int p,int u,int i){
	if(a<=p && u<=b){
		if(t[i]>sol) sol=t[i];
		return ;
	}
	int m=(p+u)>>1;
	if(a<=m)
		maxim(p,m,2*i);
	if(b>m)
		maxim(m+1,u,2*i+1);
}
int main(){
	freopen("arbint.in","r",stdin);
	freopen("arbint.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		scanf("%d",&val);
		poz=i;
		actual(1,n,1);
	}
	for(int i=1;i<=m;i++){
		scanf("%d%d%d",&x,&a,&b);
		sol=0;
		if(x==0) {
			maxim(1,n,1);
			printf("%d\n",sol);
		}
		else {
			poz=a;
			val=b;
			actual(1,n,1);
		}
	}
	return 0;
}