Cod sursa(job #2019089)

Utilizator HumikoPostu Alexandru Humiko Data 6 septembrie 2017 22:07:59
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>
#include <algorithm>

using namespace std;

ifstream fin ("arbint.in");
ofstream fout ("arbint.out");

int arb[4000005], x, pozitie, a, b, maxim;

void update (int nod, int st, int dr)
{
    if ( st == dr )
    {
        arb[nod] = x;
        return;
    }
    int mij = st + ( dr - st )/2;
    if ( pozitie <= mij)
        update (2 * nod, st, mij);
    else
        update (2 * nod + 1, mij + 1, dr);
    arb[nod] = max ( arb[2*nod], arb[2*nod+1]);
}

void query (int nod, int st, int dr)
{
    if ( st >= a && dr <= b )
    {
        maxim = max(maxim, arb[nod]);
        return;
    }
    int mij = st + ( dr - st )/2;
    if ( a <= mij )
        query(2 * nod, st, mij);
    if ( mij < b )
        query (2 * nod + 1, mij + 1, dr);
}

int main()
{
    int n, m, cod;
    fin>>n>>m;
    for ( int i = 1; i <= n; ++i )
    {
        fin>>x;
        pozitie = i;
        update (1, 1, n);
    }
    while ( m-- )
    {
        fin>>cod>>a>>b;
        if ( cod == 0 )
        {
            maxim = 0;
            query(1, 1, n);
            fout<<maxim<<'\n';
        }
        else
        {
            pozitie = a;
            x = b;
            update (1, 1, n);
        }
    }
}