Cod sursa(job #1344415)

Utilizator tudorv96Tudor Varan tudorv96 Data 16 februarie 2015 18:27:12
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>
using namespace std;

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

const int N = 4e5 + 5;

int a[N], n, u, x, y;
bool type;

void update(int node, int lt, int rt, int poz, int val) {
    if (lt == rt) {
        a[node] = val;
        return;
    }
    if (poz <= ((lt + rt) >> 1))
        update((node << 1), lt, ((lt + rt) >> 1), poz, val);
    else
        update((node << 1) + 1, ((lt + rt) >> 1) + 1, rt, poz, val);
    a[node] = max(a[node << 1], a[(node << 1) + 1]);
}

int query(int node, int lt, int rt, int lo, int hi) {
    if (lo <= lt && rt <= hi)
        return a[node];
    if (lo > rt || hi < lt)
        return 0;
    int MAX = 0;
    MAX = max(query((node << 1), lt, ((lt + rt) >> 1), lo, hi), query((node << 1) + 1, ((lt + rt) >> 1) + 1, rt, lo, hi));
    return MAX;
}

int main() {
    fin >> n >> u;
    for (int i = 1; i <= n; ++i) {
        fin >> x;
        update(1, 1, n, i, x);
    }
    while (u--) {
        fin >> type >> x >> y;
        if (!type)
            fout << query(1, 1, n, x, y) << "\n";
        else
            update(1, 1, n, x, y);
    }
}