Cod sursa(job #2986739)

Utilizator maiaauUngureanu Maia maiaau Data 1 martie 2023 00:09:11
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <bits/stdc++.h>
using namespace std;

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

const int N = 1e5 + 1;

int n, m, c, x, y, p, a[4 * N];

void init(), update(int, int);
int getmax(int, int, int);

int main()
{
    init();
    for (; m; m--){
        f >> c >> x >> y;
        if (c) update(x, y);
        else g << getmax(1, 1, p + 1) << '\n';
    }
    
    return 0;
}

void init(){
    f >> n >> m;
    p = 1; while (p < n) p *= 2; p--;
    for (int i = 1; i <= n; i++) f >> a[i + p];
    for (int i = p; i; i--) 
        a[i] = max(a[2 * i], a[2 * i + 1]);
}
void update(int poz, int val){
    poz += p; a[poz] = val; poz /= 2;
    while (poz){
        a[poz] = max(a[poz * 2], a[poz * 2 + 1]);
        poz /= 2;
    }
}
int getmax(int nod, int l, int r){
    if (y < l || x > r) return 0;
    if (x <= l && r <= y) return a[nod];
    int mi = (l + r) / 2;
    return max(getmax(2 * nod, l, mi), getmax(2 * nod + 1, mi + 1, r));
}