Cod sursa(job #251433)

Utilizator BaduBadu Badu Badu Data 2 februarie 2009 16:25:44
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include<stdio.h>
#define fs (nod<<1)
#define fd (fs +1)
#define mij ((st+dr)>>1)
#define MAX 1<<20
long V[MAX],n,m,val,poz,s;

void update(int nod, int st, int dr){

 if(st>=dr)V[nod]=val;
 else{

 if(poz<=mij) update(fs,st,mij);

 else update(fd,mij+1,dr);

 V[nod]=V[fs]>V[fd]?V[fs]:V[fd];
 }
}

void query(int nod,int st,int dr, int a,int b){

 if(a<=st && dr<=b) s=s>V[nod]?s:V[nod];
 else{
 if(mij>=a) query(fs,st,mij,a,b);
 if(mij<b) query(fd,mij+1,dr,a,b);
 }
}

int main(){
int o;
freopen("arbin.in","rt",stdin);
freopen("arbin.out","wt",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
 scanf("%d",&val);
 poz=i;
 update(1,1,n);
}
for(;m--;){
 scanf("%d%d%d",&o,&poz,&val);
 if(o) update(1,1,n);
 else {
	s=0;
	query(1,1,n,poz,val);
	printf("%d\n",s);
      }
}
return 0;
}