Cod sursa(job #1719565)

Utilizator FlorinHajaFlorin Gabriel Haja FlorinHaja Data 19 iunie 2016 16:36:12
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>

using namespace std;

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

int cer, a, b;
int v[100005], n, m;
int arb[500000];
int GL, GR; // Grand Left, Right
int poz, val;
int maxim, i;

void query(int nod, int L, int R){
    if (GL <= L && R <= GR){
        maxim = max(maxim, arb[nod]);

        return;
    }
    int m = (L+R)/2;
    if (GL <= m)
        query(2*nod, L, m);
    if (m < GR)
        query(2*nod+1, m+1, R);
}

void update(int nod, int L, int R){
    if (L == R){
        arb[nod] = val;
        return;
    }
    int m;
    m = (L+R)/2;
    if (poz <= m)
        update(2*nod, L, m);
    else update(2*nod+1, m+1, R);
    arb[nod] = max(arb[2*nod], arb[2*nod+1]);
}

int main(){
    f >> n >> m;
    for (i = 1; i <= n; i++){
        f >> v[i];
        poz = i, val = v[i];
        update(1, 1, n);
    }
    for (;m;m--){
        f >> cer >> a >> b;
        if (cer == 1){
            poz = a, val = b;
            update(1, 1, n);
        }
        else{
            maxim = -1;
            GL = a, GR = b;
            query(1, 1, n);
            g << maxim << '\n';
        }
    }
    return 0;
}