Cod sursa(job #1798332)

Utilizator UMihneaUngureanu Mihnea UMihnea Data 5 noiembrie 2016 10:20:53
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <fstream>

using namespace std;

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

int aint[270000], n, m, z, i, j, x, y, cod, query(int, int, int);

int main()
{
    f >> n >> m;
    for(z = 1; z <= n; z *= 2);
    for(i = 1, j = z; i <= n; i++, j++)
        f >> aint[j];
    for(i = z-1; i >= 1; i--)
        aint[i] = max(aint[2*i], aint[2*i+1]);
    for(; m; m--) {
        f >> cod >> x >> y;
        if(cod) {
            i = z-1+x;
            aint[i] = y;
            for(i /= 2; i; i /= 2) aint[i] = max(aint[2*i], aint[2*i+1]);
        } else g << query(1, 1, z) << '\n';
    }
    return 0;
}
int query(int p, int lo, int hi) {
    if(lo > y || x > hi)
        return 0;
    if(x <= lo && hi <= y)
        return aint[p];
    int mi = (lo+hi) / 2;
    return max(query(2*p, lo, mi), query(2*p+1, mi+1, hi));
}