Cod sursa(job #829306)

Utilizator BalcauIonutFMI-Balcau Ionut BalcauIonut Data 5 decembrie 2012 00:09:42
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<cstdio>
#define max(x,y) (x>y)?x:y
int a[400000];
int maxim,val,pos,l,r;
void update(int nod,int left, int right){
	if(left==right){
			a[nod]=val;
			return;
		}
	int mij=(left+right)>>1;
	if(pos<=mij)
		update((nod<<1),left,mij);
	else
		update((nod<<1)+1,mij+1,right);
	a[nod]=max(a[nod<<1],a[(nod<<1)+1]);
}

void query(int nod,int left, int right){
	if(l<=left && r>=right){
		if(maxim<a[nod]) maxim=a[nod];
		return;
	}
	int mij=(left+right)>>1;
	
	 if(l<=mij) query((nod<<1),left,mij);
	 if(r>mij) query((nod<<1)+1,mij+1,right);

}

int main(){
	int n,m,x,i;
	freopen("arbint.in","r",stdin);
	freopen("arbint.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;++i){
		scanf("%d",&val); pos=i;
		update(1,1,n);
	}
	int t,y;
	for(;m>0;--m){
		scanf("%d%d%d",&t,&x,&y);
		if(t) { val=y; pos=x; update(1,1,n);}
		else {
			maxim=0;
			l=x; r=y;
			query(1,1,n);
			printf("%d\n",maxim);
		}		
	}
	return 0;
}