Nu aveti permisiuni pentru a descarca fisierul grader_test4.in

Cod sursa(job #2018314)

Utilizator HumikoPostu Alexandru Humiko Data 4 septembrie 2017 14:59:22
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

int arb[100001], 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);
        }
    }
}