Pagini recente » Cod sursa (job #1237742) | Cod sursa (job #1278388) | Cod sursa (job #999230) | Cod sursa (job #3205500) | Cod sursa (job #2818874)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
const int N = 1e5 + 1;
int arbore[4 * N + 1], val, poz, st, dr, maxim;
void update(int nod, int left, int right) {
if (left == right) {
arbore[nod] = val;
return;
}
int mij = (left + right) / 2;
if (poz <= mij) update(2 * nod, left, mij);
else update(2 * nod + 1, mij + 1, right);
arbore[nod] = max(arbore[2 * nod], arbore[2 * nod + 1]);
}
void query(int nod, int left, int right) {
if (st <= left && right <= dr) {
if (maxim < arbore[nod]) maxim = arbore[nod];
return;
}
int mij = (left + right) / 2;
if (st <= mij) query(2 * nod, left, mij);
if (mij < dr) query(2 * nod + 1, mij + 1, right);
}
int main() {
int n, m;
fin >> n >> m;
for (int i = 1; i <= n; i++) {
int x;
fin >> x;
poz = i, val = x;
update(1, 1, n);
}
for (int i = 1; i <= m; i++) {
int cerr, a, b;
fin >> cerr >> a >> b;
if (cerr == 0) {
maxim = -1;
st = a, dr = b;
query(1, 1, n);
fout << maxim << "\n";
} else {
poz = a, val = b;
update(1, 1, n);
}
}
return 0;
}