Cod sursa(job #174082)

Utilizator bacerandreiBacer Andrei bacerandrei Data 8 aprilie 2008 14:14:32
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.45 kb
# include <stdio.h>
  
# define input "arbint.in"   
# define output "arbint.out"   
  
# define max 100001
# define maxim(A,B) (A>B?A:B)   
  
int n,i,j,x,y,m,c;   
  
int a[4*max];   
  
void insert(int st,int dr,int x,int val,int nod)   
{   
     if(st == dr)   
     {   
           a[nod] = val;   
           return;   
     }   
     int mij = (st+dr)/2;
     if(mij >= x)   
        insert(st,mij,x,val,2*nod);   
     else  
        insert(mij+1,dr,x,val,2*nod+1);   
     a[nod] = maxim(a[2*nod],a[2*nod+1]);   
}   
  
int interogare(int st,int dr,int x,int y,int nod)   
{   
    if(x <= st && dr <= y)   
    {   
         return a[nod];   
    }   
    int mij = (st+dr)/2;   
    int val1,val2;   
    val1 = val2 = 0;   
    if(x <= mij) val1 = interogare(st,mij,x,y,2*nod);   
    if(y >= mij+1) val2 = interogare(mij+1,dr,x,y,2*nod+1);   
    return maxim(val1,val2);   
}   
  
int main()   
{   
    freopen(input, "r", stdin);   
    freopen(output, "w", stdout);   
       
    scanf("%d%d",&n,&m);   
       
    for(i = 1;i<=n;i++)   
    {   
        scanf("%d",&x);   
        insert(1,n,i,x,1);   
    }   
       
    for(i=1;i<=m;i++)   
    {   
        scanf("%d%d%d",&c, &x, &y);   
        if(c)   
        {   
             insert(1,n,x,y,1);   
        }   
        else  
           printf("%d\n",interogare(1,n,x,y,1));   
           
    }   
  
       
    return 0;   
}