Cod sursa(job #1346279)

Utilizator StefansebiStefan Sebastian Stefansebi Data 18 februarie 2015 09:43:48
Problema Arbori de intervale Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include<fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int arb[100009], n, i, maxim, a1, b1, m, c, nr;

void update(int n, int l, int r){
    if (l == r){
        arb[n] = b1;
        return;
    }
    int m = (l + r) / 2;
    if (a1 <= m)
        update(n * 2, l, m);
    else
        update(n * 2 + 1, m + 1, r);
    arb[n] = max(arb[n * 2], arb[n * 2 + 1]);
}

void query(int n, int l, int r){
    if (a1 <= l and b1 >= r)
        if (maxim < arb[n])
            maxim = arb[n];
    if (a1 > r or b1 < l or arb[n] == 0)
        return;
    int m = (l + r) / 2;
    query(n * 2, l, m);
    query(n * 2 + 1, m + 1, r);
}

int main(){
    fin >> n >> m;
    for (i = 1; i <= n; i++){
        //fin >> a[i];
        fin >> nr;
        a1 = i; b1 = nr;
        update(1, 1, n);
    }
    //build(1, 1, n);
   // for (i = 1; i <= 9; i++)
    //   fout << arb[i] << " ";
    for (i = 1; i <= m; i++){
        fin >> c;
        if (c == 0){
            fin >> a1 >> b1;
            maxim = 0;
            query(1, 1, n);
            fout << maxim << '\n';
        } else {
            fin >> a1 >> b1;
            update(1, 1, n);
        }
    }
}