Cod sursa(job #364862)

Utilizator adelinasAdelina Spataru adelinas Data 17 noiembrie 2009 09:59:27
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <stdio.h>
#define N 100005
int t[4*N],n,m;
int a,b,poz,val,sol;
int max(int a,int b){
	if(a>b) return a;
	return b;
}
void update(int p,int q,int i){
	if(p==q){
		t[i]=val;
		return ;
	}
	int m=(p+q)>>1;
	if(poz<=m) update(p,m,i*2);
	else update(m+1,q,i*2+1);
	t[i]=max(t[i*2],t[i*2+1]);
}
void caut(int p,int q,int i){
	if(a<=p && q<=b){
		sol=max(sol,t[i]);
		return ;
	}
	int m=(p+q)>>1;
	if(a<=m) caut(p,m,2*i);
	if(b>m)  caut(m+1,q,2*i+1);
}
int main(){
	int i,x,y,z;
	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;//val=v[i];
		update(1,n,1);
	}
	for(i=1;i<=m;i++){
		scanf("%d%d%d",&x,&y,&z);
		if(x){
			poz=y;
			val=z;
			update(1,n,1);
		}
		else {
			sol=0;
			a=y;b=z;
			caut(1,n,1);
			printf("%d\n",sol);
		}
	}
	return 0;
}