Cod sursa(job #157590)

Utilizator DorinOltean Dorin Dorin Data 13 martie 2008 09:45:25
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 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;
}