Cod sursa(job #1083655)

Utilizator EmmaLLeu Manuela EmmaL Data 16 ianuarie 2014 10:52:38
Problema Arbori de intervale Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.47 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)>>1;   
     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;   
}