Cod sursa(job #2158041)

Utilizator LolkekzorChiorean Tudor Lolkekzor Data 10 martie 2018 09:50:29
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <iostream>
#include <fstream>
using namespace std;

int Arb[400010];
int n, m, i, x, y, op;

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

void Update(int nod, int st, int dr, int a, int b, int val) {
    if (dr < a || st > b)
        return;

    int mij;

    if (st >= a && dr <= b) {
        Arb[nod] = val;
    } else {
        mij = (st + dr) / 2;

        Update(nod * 2, st, mij, a, b, val);
        Update(nod * 2 + 1, mij + 1, dr, a, b, val);

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

int Query(int nod, int st, int dr, int a, int b) {
    if (dr < a || st > b)
        return 0;

    int mij;

    if (st >= a && dr <= b) {
        return Arb[nod];
    } else {
        mij = (st + dr) / 2;

        return max(Query(nod * 2, st, mij, a, b), Query(nod * 2 + 1, mij + 1, dr, a, b));
    }
}

int main()
{
    fin >> n;
    fin >> m;
    for (i = 1 ; i <= n ; i++) {
        fin >> x;
        Update(1, 1, n, i, i, x);
    }
    for (i = 1 ; i <= m ; i++) {
        fin >> op;
        if (op == 1) {
            fin >> x >> y;
            Update(1, 1, n, x, x, y);
        } else {
            fin >> x >> y;
            fout << Query(1, 1, n, x, y) << '\n';
            /// find max
        }
    }
    return 0;
}