Pagini recente » Cod sursa (job #2532341) | Cod sursa (job #1552359) | Cod sursa (job #1499488) | Cod sursa (job #2110292) | Cod sursa (job #2694178)
#include <bits/stdc++.h>
#define ll long long
#define cin fin
#define cout fout
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n, m, wantNode, wantVal, wantLeft, wantRight, maxOfInterval, val[400099];
void update(int node, int left, int right) {
if (left == right) {
val[node] = wantVal;
return;
}
int mid = (left + right) / 2;
if (wantNode <= mid)
update(2 * node, left, mid);
else
update(2 * node + 1, mid + 1, right);
val[node] = max(val[2 * node + 1], val[2 * node]);
}
void computeAns(int node, int left, int right) {
if (left >= wantLeft && right <= wantRight) {
maxOfInterval = max(maxOfInterval, val[node]);
return;
}
int mid = (left + right) / 2;
if (mid >= wantLeft)
computeAns(2 * node, left, mid);
if (mid + 1 <= wantRight)
computeAns(2 * node + 1, mid + 1, right);
}
int main() {
ios :: sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> wantVal;
wantNode = i;
update(1, 1, n);
}
int type;
for (int query = 1; query <= m; query++) {
cin >> type;
if (type) {
cin >> wantNode >> wantVal;
update(1, 1, n);
} else {
cin >> wantLeft >> wantRight;
computeAns(1, 1, n);
cout << maxOfInterval << '\n';
maxOfInterval = 0;
}
}
return 0;
}