Cod sursa(job #2638392)

Utilizator kidesoEles Julia kideso Data 28 iulie 2020 09:18:40
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream cin ("arbint.in");
ofstream cout ("arbint.out");

int N, i, a, M, op, maxi, b;
vector <int> x;

void betesz (int bal, int jobb, int gyoker, int poz, int k)
{
    if (bal == jobb)
    {
        x[gyoker] = k;
        return;
    }

    int kozep = (bal + jobb) / 2;

    if (poz <= kozep) betesz (bal, kozep, 2 * gyoker, poz, k);
    else betesz (kozep + 1, jobb, 2 * gyoker + 1, poz, k);

    x[gyoker] = max (x[2 * gyoker], x[2 * gyoker + 1]);
}

void leker (int bal, int jobb, int gyoker, int a, int b)
{
    if (a <= bal && jobb <= b)
    {
        maxi = max (maxi, x[gyoker]);
        return;
    }

    int kozep = (bal + jobb) / 2;

    if (a <= kozep) leker (bal, kozep, 2 * gyoker, a, b);
    if (b > kozep) leker (kozep + 1, jobb, 2 * gyoker + 1, a, b);
}

int main()
{
    cin >> N >> M;
    x.resize(4 * N + 1);
    for (i = 1; i <= N; ++i)
    {
        cin >> a;
        betesz (1, N, 1, i, a);
    }

    for (i = 1; i <= M; ++i)
    {
        cin >> op >> a >> b;
        if(op == 0)
        {
            maxi = -1;
            leker (1, N, 1, a, b);
            cout << maxi << "\n";
        }
        else betesz (1, N, 1, a, b);
    }


    return 0;
}