Cod sursa(job #1299431)

Utilizator somuBanil Ardej somu Data 23 decembrie 2014 17:29:47
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <fstream>
#define nmax 100005
using namespace std;

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

int n, m;
int val, poz, start, finish, op, maxim;
int ARB[2*nmax+2];

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

void query(int nod, int st, int dr) {
    if (start <= st && dr <= finish) {
        maxim = max(maxim, ARB[nod]);
        return;
    }
    int mid = (st + dr) / 2;
    if (start <= mid) query(2*nod, st, mid);
    if (mid < finish) query(2*nod+1, mid+1, dr);
}

int main() {
    
    fin >> n >> m;
    for (int i = 1; i <= n; i++) {
        fin >> val;
        poz = i;
        update(1, 1, n);
    }
    for (int i = 1; i <= m; i++) {
        fin >> op;
        if (!op) {
            fin >> start >> finish;
            maxim = -1;
            query(1, 1, n);
            fout << maxim << "\n";
        } else {
            fin >> poz >> val;
            update(1, 1, n);
        }
    }
    fin.close();
    fout.close();
    return 0;
}