Cod sursa(job #2817196)

Utilizator VladTZYVlad Tiganila VladTZY Data 13 decembrie 2021 09:59:15
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.54 kb
#include <fstream>

#define NMAX 100001

using namespace std;

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

int n, questions, val, pos, answer, start, finish, type, a, b;
int arbore[5 * NMAX];

void update(int node, int left, int right) {

    if (left == right) {

        //g << left << " " << right << " " << node << " " << val << "\n";

        arbore[node] = val;

        return ;
    }

    int mid = (left + right) / 2;

    if (pos <= mid) {
        update(2 * node, left, mid);
    } else {
        update(2 * node + 1, mid + 1, right);
    }

    arbore[node] = max(arbore[node * 2], arbore[node * 2 + 1]);
}

void query(int node, int left, int right) {

    if (start <= left && right <= finish) {

        //g << left << " " << right << " " << node << "\n";

        answer = max(answer, arbore[node]);

        return ;
    }

    int mid = (left + right) / 2;

    if (start <= mid)
        query(node * 2, left, mid);
    if (mid < finish)
        query(node * 2 + 1, mid + 1, right);

}

int main()
{
    f >> n >> questions;

    for (int i = 1; i <= n; i++) {
        f >> val;

        pos = i;
        update(1, 1, n);
    }

    while (questions--) {
        f >> type >> a >> b;

        if (type == 0) {

            answer = -1;
            start = a;
            finish = b;

            query(1, 1, n);

            g << answer << "\n";
        } else {

            pos = a;
            val = b;

            update(1, 1, n);
        }
    }

    return 0;
}