Cod sursa(job #1324612)

Utilizator margikiMargeloiu Andrei margiki Data 22 ianuarie 2015 16:15:11
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
# include <fstream>
# include <algorithm>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int i,j,n,m,a,b,tip,maxx;
int arb[300000],x,y;
void actualizare(int nod, int ci, int cs)
{
    if (ci==cs)
    {
        arb[nod]=b;
    }
    else {
             int mij=(ci+cs)/2;
             if (a<=mij) actualizare(nod*2, ci, mij);
             if (a>mij) actualizare (nod*2+1, mij+1, cs);

             arb[nod]=max(arb[nod*2], arb[nod*2+1]);
         }
}
void maxim (int nod, int ci, int cs)
{
    if (a<=ci && cs<=b) maxx=max(maxx, arb[nod]);
    else {
             int mij=(ci+cs)/2;
             if (a<=mij) maxim(nod*2, ci, mij);
             if (b>mij) maxim(nod*2+1, mij+1, cs);
         }
}
int main ()
{
    f>>n>>m;
    for (i=1; i<=n; ++i)
        {f>>x; a=i; b=x; actualizare(1,1,n);}

    for (i=1; i<=m; ++i)
    {
        f>>tip;
        if (tip==0)
        {
            maxx=0;
            f>>a>>b;
            maxim (1,1,n);
            g<<maxx<<"\n";
        }
        else {
                 f>>a>>b;
                 actualizare (1,1,n);
             }
    }
    return 0;
}