Cod sursa(job #2395760)

Utilizator radumihaisirbuSirbu Radu-Mihai radumihaisirbu Data 2 aprilie 2019 20:46:48
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <bits/stdc++.h>

using namespace std;

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

const int nmax = 1e5 + 5;

int n, q, a[5 * nmax], op, x, y, val, poz, start, finish, Max;

void update (int nod, int st, int dr)
{
    int mij;

    if (st == dr)
    {
        a[nod] = val;
        return;
    }

    mij = (st + dr) / 2;
    if (poz <= mij) update(2 * nod, st, mij);
    else update(2 * nod + 1, mij+1, dr);

    a[nod] = max(a[2*nod], a[2*nod+1]);
}

void query (int nod, int st, int dr)
{
    int mij;

    if (start <= st && dr <= finish)
    {
        Max = max(Max, a[nod]);
        return;
    }

    mij = (st + dr) / 2;
    if (start <= mij) query(2 * nod, st, mij);
    if (mij < finish) query(2 * nod + 1, mij+1, dr);
}

int main()
{
    fin >> n >> q;
    for (int i=1; i<=n; i++)
    {
        fin >> val;
        poz = i;
        update(1, 1, n);
    }
    while (q--)
    {
        fin >> op >> x >> y;
        if (op == 1)
        {
            poz = x;
            val = y;
            update(1, 1, n);
        }
        else
        {
            Max = -1;
            start = x;
            finish = y;
            query(1, 1, n);
            fout << Max << '\n';
        }
    }
    return 0;
}