Pagini recente » Cod sursa (job #3146639) | Cod sursa (job #2131576) | Cod sursa (job #560817) | Cod sursa (job #1801227) | Cod sursa (job #2424487)
#include <fstream>
const int MAX_M = 10;
int v[1 << 18], n, m;
int a, b, pos, val;
inline void update(int p, int st, int dr) {
if (st == dr) {
v[p] = val;
return;
}
int m = (st + dr) / 2;
if (pos <= m) update(2 * p, st, m);
else update(2 * p + 1, m + 1, dr);
v[p] = std::max(v[2 * p], v[2 * p + 1]);
}
inline int query(int p, int st, int dr) {
if (a <= st && dr <= b) return v[p];
int m = (st + dr) / 2, v1 = 0, v2 = 0;
if (a <= m) v1 = query(2 * p, st, m);
if (b > m) v2 = query(2 * p + 1, m + 1, dr);
return std::max(v1, v2);
}
int main() {
std::ifstream in("arbint.in");
std::ofstream out("arbint.out");
int i, x;
in >> n >> m;
for (pos = 1; pos <= n; ++pos) {
in >> val;
update(1, 1, n);
}
for (i = 0; i < m; ++i) {
in >> x >> a >> b;
if (x == 0) out << query(1, 1, n) << '\n';
else {
pos = a;
val = b;
update(1, 1, n);
}
}
return 0;
}