Pagini recente » Cod sursa (job #1644535) | Cod sursa (job #2982861) | Cod sursa (job #1422911) | Cod sursa (job #2933811) | Cod sursa (job #1452793)
#include<fstream>
#include<algorithm>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
const int MAX = (1 << 20) + 1;
int aint[MAX], A[MAX];
int M, N;
int val, pos;
int start, finish;
int ans;
void update(int left, int right, int idx) {
if (left == right) {
aint[idx] = val;
return ;
}
int mid = (left + right) / 2;
if (mid >= pos) {
update(left, mid, 2 * idx);
} else {
update(mid + 1, right, 2 * idx + 1);
}
aint[idx] = max(aint[2 * idx], aint[2 * idx + 1]);
}
void query(int left, int right, int idx) {
if (start <= left && right <= finish) {
if (ans < aint[idx]) {
ans = aint[idx];
}
return ;
}
int mid = (left + right) /2;
if (start <= mid) {
query (left, mid, 2 * idx);
}
if (mid < finish) {
query(mid + 1, right, 2 * idx + 1);
}
}
int main() {
fin >> N >> M;
for (int i = 0; i < N; i++) {
int el;
pos = i;
val = el;
update(1, N, 1);
fin >> el;
A[i] = el;
}
for (int i = 0; i < M; i++) {
int op, a, b;
fin >> op >> a >> b;
if (op == 0) {
ans = -1;
start = a;
finish = b;
query(1, N, 1);
fout << ans << '\n';
}
else {
pos = a;
val = b;
update(1, N, 1);
}
}
}