Pagini recente » Cod sursa (job #2746659) | Cod sursa (job #2833618)
#include <fstream>
using namespace std;
const string filename = "arbint";
ifstream fin(filename + ".in");
ofstream fout(filename + ".out");
const int max_size = 1e5 + 5;
int tree[max_size * 4], val, pos, st, dr, maxim;
void update(int node, int l, int r) {
if (l == r) {
tree[node] = val;
return;
}
int mid = (l + r) / 2;
if (pos <= mid) {
update(2 * node, l, mid);
} else {
update(2 * node + 1, mid + 1, r);
}
tree[node] = max(tree[2 * node], tree[2 * node + 1]);
}
void query(int node, int l, int r) {
if (st <= l && r <= dr) {
if (maxim < tree[node]) {
maxim = tree[node];
}
return;
}
int mid = (l + r) / 2;
if (st <= mid) {
query(2 * node, l, mid);
}
if (mid < dr) {
query(2 * node + 1, mid + 1, r);
}
}
int main() {
int n, m;
fin >> n >> m;
for (int i = 1; i <= n; i++) {
int x;
fin >> x;
pos = i, val = x;
update(1, 1, n);
}
for (int i = 1; i <= m; i++) {
int c, a, b;
fin >> c >> a >> b;
if (c == 0) {
maxim = -1;
st = a, dr = b;
query(1, 1, n);
fout << maxim << '\n';
} else {
pos = a, val = b;
update(1, 1, n);
}
}
return 0;
}