Pagini recente » civilizatie | Cod sursa (job #742769) | Cod sursa (job #2238463) | Cod sursa (job #1258286) | Cod sursa (job #1223085)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("arbint.in");
ofstream g ("arbint.out");
const int NMAX = 100000;
int n, m, poz, valoare, a, b, sol;
int arb[4 * NMAX + 1];
void update(int, int, int);
void query(int, int, int);
void citeste() {
f >> n >> m;
for (int i = 1; i <= n; i++) {
f >> valoare;
poz = i;
update(1, 1, n);
}
}
void rezolva() {
int op;
for (int i = 1; i <= m; i++) {
f >> op >> a >> b;
if (op == 0) {
sol = -1;
query(1, 1, n);
g << sol << '\n';
}
else {
valoare = b;
poz = a;
update(1, 1, n);
}
}
}
int main () {
citeste();
rezolva();
return 0;
}
void update(int nod, int stanga, int dreapta) {
if (stanga == dreapta) {
arb[nod] = valoare;
}
else {
int m = (stanga + dreapta) / 2;
if (poz <= m) update(2 * nod, stanga, m);
else update(2 * nod + 1, m + 1, dreapta);
arb[nod] = max(arb[2 * nod], arb[2 * nod + 1]);
}
}
void query(int nod, int stanga, int dreapta) {
if (a <= stanga && dreapta <= b) sol = max(sol, arb[nod]);
else {
int m = (stanga + dreapta) / 2;
if (a <= m) query(2 * nod, stanga, m);
if (m < b) query(2 * nod + 1, m + 1, dreapta);
}
}