Pagini recente » Cod sursa (job #1133720) | Cod sursa (job #1142155) | Cod sursa (job #543852) | Cod sursa (job #1536706) | Cod sursa (job #1783743)
#include <iostream>
#include <fstream>
using namespace std;
int aint[2 * 100001];
int pos, val, sol;
int start, finish;
int maxim (int a, int b) {
if (a > b) {
return a;
}
return b;
}
void update (int nod, int left, int right) {
if (left == right) {
aint[nod] = val;
return;
}
int div = (left + right) / 2;
if (pos <= div) {
update (2 * nod, left, div);
} else {
update (2 * nod + 1, div + 1, right);
}
aint[nod] = maxim (aint[2 * nod], aint[2 * nod + 1]);
}
void query (int nod, int left, int right) {
if (start <= left && right <= finish) {
if (sol < aint[nod]) {
sol = aint[nod];
}
return;
}
int div = (left + right) / 2;
if (start <= div) {
query (2 * nod, left, div);
}
if (div < finish) {
query (2 * nod + 1, div + 1, right);
}
}
int main() {
ifstream file_in ("arbint.in");
ofstream file_out ("arbint.out");
int n, m;
bool op;
int x, y;
int i;
file_in >> n >> m;
for (i = 1; i <= n; i++) {
file_in >> val;
pos = i;
update (1, 1, n);
}
for (i = 0; i < m; i++) {
file_in >> op >> x >> y;
if (op) {
pos = x;
val = y;
update (1, 1, n);
} else {
start = x;
finish = y;
sol = -1;
query (1, 1, n);
file_out << sol << "\n";
}
}
return 0;
}