Cod sursa(job #501404)

Utilizator buburuzaLaura S buburuza Data 14 noiembrie 2010 21:29:20
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.56 kb
# include <stdio.h>
# include <cstdlib>

using namespace std;

int maxim, poz, maxarb[400004];
void interogare(int nod, int st, int dr, int limi, int lims)
{int mij;
     if (limi <= st && dr <= lims)
     {
            if (maxarb[nod] > maxim)
            maxim = maxarb[nod];
            return;
                   }
     mij = (st + dr)/2;
     if (mij >= limi ) interogare(2 * nod, st, mij, limi, lims);
     if (mij < lims) interogare(2 * nod + 1, mij + 1, dr, limi, lims);
}

void actualizare(int nod, int st, int dr, int poz, int val)
{int mij;
     if (st == dr)
     {
            maxarb[nod] = val;
            return;
            }
     mij = (st + dr)/2;
     if (poz <= mij) actualizare(2 * nod, st, mij, poz, val);
     if (poz > mij) actualizare(2 * nod + 1, mij + 1, dr, poz, val);
     
     if (maxarb[2 * nod] <= maxarb[2 * nod + 1])
                  maxarb[nod] = maxarb[2 * nod + 1];
             else maxarb[nod] = maxarb[2 * nod];
}

int main()
{int i, n, m, x, num, c, d;
    
    freopen("arbint.in","r",stdin);
    freopen("arbint.out","w",stdout);
    
    scanf("%d%d",&n,&m);
    
    for (i = 1; i <= n; i++)
    {
        scanf("%d",&num);
        actualizare(1,1,n,i,num);
        }
    
    for (i = 1; i <= m; i++)
    {
        scanf("%d%d%d",&x,&c,&d);
        if (x == 0) 
        {
              maxim = -100;
              interogare(1,1,n,c,d);
              printf("%d\n",maxim);
              }
        else
        {    
             actualizare(1,1,n,c,d);
             }
    }
return 0;
}