Cod sursa(job #2186684)

Utilizator Narvik13Razvan Roatis Narvik13 Data 25 martie 2018 20:52:02
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <iostream>
#include <fstream>
#define MMAX 300000

using namespace std;

ifstream f("arbint.in");
ofstream o("arbint.out");

int arb[MMAX], n, m, a, b, maxim;

void update(int nod, int st, int dr)
{
    if(st == dr)
    {
        arb[nod] = b;
        return;
    }

    int mij = st + ((dr - st) >> 1);

    if(a <= mij)
        update(nod<<1,st,mij);
    else
        update((nod<<1)+1,mij+1,dr);

    arb[nod] = max(arb[nod<<1],arb[(nod<<1)+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(mij >= a)
        query(nod<<1,st,mij);
    if(mij+1 <= b)
        query((nod<<1)+1,mij+1,dr);
}

int main()
{
    f >> n >> m;
    for(a = 1; a <= n; ++a)
    {
        f >> b;
        update(1,1,n);
    }
    for(int i = 1; i <= m; ++i)
    {
        int c;
        f >> c >> a >> b;
        if(c == 1)
            update(1,1,n);
        else
        {
            maxim = -1;
            query(1,1,n);
            o << maxim << '\n';
        }
    }
    return 0;
}