Cod sursa(job #1807414)

Utilizator KusikaPasa Corneliu Kusika Data 16 noiembrie 2016 16:14:32
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <bits/stdc++.h>

using namespace std;

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

int ind, val;
int l, r;
int t[400100];

void update (int st, int dr, int pos)
{
    if (st == dr) {
        t[pos] = val;
        return;
    }
    
    int mid = (st + dr) >> 1;
    if (ind <= mid) update(st, mid, pos*2);
    else update(mid+1, dr, pos*2 + 1);
    
    t[pos] = max(t[pos*2], t[pos*2+1]);
}

int query (int st, int dr, int pos)
{
    if (st >= l && dr <= r) {
        return t[pos];
    }
    int mid = (st + dr) >> 1;
    int A=0, B=0;
    if (l <= mid) A = query(st, mid, 2*pos);
    if (r > mid) B = query(mid+1, dr, 2*pos+1);
    return max(A, B);
}

int main() 
{
    int n, q;
    in >> n >> q;
    for (ind = 1; ind <= n; ind++) {
        in >> val;
        update(1, n, 1);
    }
    
    for (int i = 0; i < q; i++) {
        int type;
        in >> type;
        if (type == 1) {
            in >> ind >> val;
            update(1, n, 1);
        } else {
            in >> l >> r;
            out << query(1, n, 1) << "\n";
        }
    }
}