Cod sursa(job #2624438)

Utilizator dariahazaparuHazaparu Daria dariahazaparu Data 4 iunie 2020 20:38:19
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <iostream>
#include <fstream>
#include <ctgmath>

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

int arbint[10000005];
int maxim;

void insert(int poz, int nod, int val, int st, int dr) {
    if (st == dr) {
        arbint[nod] = val;
        return;
    }
    int mijloc = (st + dr ) / 2;
    if (poz <= mijloc) {
        insert(poz, 2*nod, val, st, mijloc);

    } else {
        insert (poz, 2*nod + 1, val, mijloc + 1, dr);
    }
    arbint[nod] = std :: max(arbint[2 * nod], arbint[2*nod + 1]);
}

void get(int nod, int st, int dr, int start, int final) {

    if (start <= st and dr <= final) {
        maxim = arbint[nod];
        return;
    }
    int mijloc = (st + dr) / 2;
    if (start <= mijloc) get(2*nod, st, mijloc, start, final);
    if (mijloc < final) get(2*nod + 1, mijloc + 1, dr, start, final);
}

int main() {

    int n, m;
    fin >> n >> m;
    for (int i = 1; i <= n; ++i) {
        int p;
        fin >> p;
        insert(i, 1, p, 1, n);
    }
    for (int i = 1; i <= m; ++i) {
        int x, a, b;
        fin >> x >> a >> b;
        if (x == 0) {
            maxim = -1;
            get(1, 1, n, a, b);
            fout << maxim << '\n';
        } else {
            insert(a, 1, b, 1, n);
        }
    }
    return 0;
}