Cod sursa(job #365200)

Utilizator doru.nituNitu Doru Constantin doru.nitu Data 18 noiembrie 2009 08:23:04
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.45 kb
#include<stdio.h>
#include<algorithm>

using namespace std;

int a[1001000],i,j,m,x,y,z,val,p,rez,n;

int actual(int st,int dr,int i)
{ 
	if(st==dr) { 
		         a[i]=val;
				 
	             return 0;
	           }
	
	int mij=(st+dr)/2; 
	
	if(p <= mij)  actual(st ,mij ,i*2);
	
	else actual( mij+1, dr, i*2+1);
	
	a[i] = max(a[i*2] , a[i*2+1]);
	
    return 0;
	
}

int Search(int st,int dr,int i)
{ if(x <= st && dr <= y) { 
	                       rez=max(rez,a[i]);
						   
					       return 0;
                         } 

 int mij = (st+dr)/2;
 
 if(x <= mij) Search(st ,mij ,i*2);
 
 if(y > mij) Search(mij+1 ,dr ,i*2+1);
 
 return 0;
 
}

int main()
{ 
	freopen("arbint.in","r",stdin);
	freopen("arbint.out","w",stdout);
	
	scanf("%d %d",&n,&m);
	
	for(i=1;i<=n;i++) { 
		                scanf("%d",&val); 
						
	                    p=i; 
						
	                    actual(1,n,1); 
						
	                  }	
	for(i=1;i<=m;i++) { scanf("%d %d %d",&z,&x,&y);
	
	                    if(z) { 
							    val = y;
								
	                            p = x;
								
                                actual(1,n,1);
						      }
						
                        else { rez=0;
						
                               Search(1,n,1);
						
                               printf("%d\n",rez);
							   
						     }
	                  }

    fclose(stdin);
    fclose(stdout);
    return 0;
}