Cod sursa(job #1645225)

Utilizator serbanSlincu Serban serban Data 10 martie 2016 11:37:05
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>

using namespace std;

int h[400005];

int poz, val;
void update(int node, int st, int dr) {
    if(st == dr) {
        h[node] = val;
        return ;
    }
    int mid = (st + dr) / 2;
    if(poz > mid) update(node * 2 + 1, mid + 1, dr);
    if(poz <= mid) update(node * 2, st, mid);
    h[node] = max(h[node * 2], h[node * 2 + 1]);
    return ;
}

int l, r;
int query(int nod, int st, int dr) {
    if(l <= st && dr <= r) return h[nod];
    int mid = (st + dr) / 2, mx = 0;
    if(l <= mid) mx = query(nod * 2, st, mid);
    if(r > mid) mx = max(mx, query(nod * 2 + 1, mid + 1, dr));
    return mx;
}

int main()
{
    ifstream f("arbint.in");
    ofstream g("arbint.out");
    int n, m, op, b, c;
    f >> n >> m;
    for(int i = 1; i <= n; i ++) f >> val, poz = i, update(1, 1, n);
    for(int i = 1; i <= m; i ++) {
        f >> op >> poz >> val;
        if(op) update(1, 1, n);
        else l = poz, r = val, g << query(1, 1, n) << "\n";
    }
    return 0;
}