Cod sursa(job #2757185)

Utilizator davalxdavid alex davalx Data 4 iunie 2021 12:17:06
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>

using namespace std;

const int P2MAX = (1 << 18);
const int INF = 1 << 30;

int aint[P2MAX], poz, val, a, b;

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

void actualizare(int p, int st, int dr) {
    if (st == dr) {
        aint[p] = val;
        return;
    }
    int m = (st + dr) / 2;
    if (poz <= m)
        actualizare(2 * p, st, m);
    else
        actualizare(2 * p + 1, m + 1, dr);
    aint[p] = max(aint[2 * p], aint[2 * p + 1]);
}

int interogare(int p, int st, int dr) {
    if (st>=a && dr<=b)
        return aint[p];
    int m=(st+dr)/2,max_st=-INF,max_dr=-INF;
    if (a<=m)
        max_st = interogare(2 * p, st, m);
    if (b>m)
        max_dr = interogare(2 * p + 1, m + 1, dr);
    return max(max_st, max_dr);
}

int main() {

    int n,q;
    cin>>n>>q;
    for (poz=1;poz<=n;poz++){
        cin>>val;
        actualizare(1, 1, n);
    }
    while(q--){
        bool tip;
        cin>>tip;
        if (!tip){
            cin>>a>>b;
            cout<<interogare(1, 1, n) << '\n';
        }
        else {
            cin>>poz>>val;
            actualizare(1, 1, n);
        }
    }
    return 0;
}