Pagini recente » Cod sursa (job #98530) | Cod sursa (job #3235542) | Cod sursa (job #163283) | Cod sursa (job #998953) | Cod sursa (job #3127165)
#include <bits/stdc++.h>
using namespace std;
int main() {
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int n, q; cin >> n >> q;
vector<int> qt(q), qa(q), qb(q), ans(q);
vector<int> v(n), iv(n);
for (int i = 0; i < n; ++i) cin >> iv[i];
for (int i = 0; i < q; ++i) {
cin >> qt[i] >> qa[i] >> qb[i];
--qa[i];
}
for (; n; n /= 2) {
copy(iv.begin(), iv.end(), v.begin());
for (int i = 0; i < q; ++i) {
if (qt[i] == 0 && qa[i] < qb[i]) {
if (qa[i] % 2) ans[i] = max(ans[i], v[qa[i]++]);
if (qb[i] % 2) ans[i] = max(ans[i], v[--qb[i]]);
qa[i] /= 2; qb[i] /= 2;
}
if (qt[i] == 1) {
v[qa[i]] = qb[i];
qb[i] = max(v[qa[i]], v[qa[i] ^ 1]);
qa[i] /= 2;
}
}
for (int i = 0; i + 1 < n; i += 2)
iv[i / 2] = max(iv[i], iv[i + 1]);
}
for (int i = 0; i < q; ++i)
if (qt[i] == 0)
cout << ans[i] << "\n";
return 0;
}