Pagini recente » Cod sursa (job #2198210) | Cod sursa (job #462182) | Cod sursa (job #3005190) | Cod sursa (job #634902) | Cod sursa (job #2693770)
#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, v[100005], rasp[400099];
int wantLeft, wantRight, wantVal, wantNode, queryAns = 0;
void update(int node, int left, int right) {
if (left == right) {
rasp[node] = wantVal;
return;
}
int mid = (left + right) / 2;
if (wantNode <= mid)
update(2 * node, left, mid);
else
update(2 * node + 1, mid + 1, right);
rasp[node] = max(rasp[2 * node], rasp[2 * node + 1]);
}
void computeRes(int node, int left, int right) {
if (wantLeft <= left && right <= wantRight) {
queryAns = max(queryAns, rasp[node]);
return;
}
if (left == right)
return;
int mid = (left + right) / 2;
computeRes(2 * node, left, mid);
computeRes(2 * node + 1, mid + 1, right);
}
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> v[i];
wantVal = v[i];
wantNode = i;
update(1, 1, n);
}
for (int query = 1; query <= m; query++) {
int type;
cin >> type;
if (type) {
cin >> wantNode >> wantVal;
update(1, 1, n);
} else {
queryAns = 0;
cin >> wantLeft >> wantRight;
computeRes(1, 1, n);
cout << queryAns << '\n';
}
}
return 0;
}