Pagini recente » Cod sursa (job #714511) | Cod sursa (job #3033126) | Cod sursa (job #2916954) | Cod sursa (job #2779226) | Cod sursa (job #2645105)
#include <bits/stdc++.h>
using namespace std;
#define MAX 100000
int T[MAX*4 + 100];
int l, r;
int pos, val;
int query(int node, int beg, int end) {
if(beg >= l && end <= r) return T[node];
if(end < l || beg > r) return INT_MIN;
int mid = (beg + end) / 2;
int p = query(2*node, beg, mid);
int q = query(2*node + 1, mid + 1, end);
return max(p, q);
}
void update(int node, int beg, int end) {
if(beg == pos && end == pos) { // beg == end == pos
T[node] = val;
return;
}
if(end < pos || beg > pos) return;
int mid = (beg + end) / 2;
update(2*node, beg, mid);
update(2*node + 1, mid+1, end);
T[node] = max(T[2*node], T[2*node + 1]);
}
int32_t main()
{
ios::sync_with_stdio(false), cin.tie(nullptr);
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
int n, m; cin >> n >> m;
// int start = 1LL << int(ceil(log2(n)));
int start = 20;
for (pos = 1; pos <= n; pos++) {
cin >> val;
update(1, 1, n);
}
// for (int i = 1; i < start + n; i++) cout << "Node: " << i << " " << "val: " << T[i] << '\n';
// cout << "-----------------------\n";
while (m--) {
int x, a, b; cin >> x >> a >> b;
if (x) {
pos = a, val = b;
update(1, 1, n);
} else {
l = a, r = b;
cout << query(1, 1, n) << '\n';
// for (int i = 1; i < start + n; i++) cout << "Node: " << i << " " << "val: " << T[i] << '\n';
// cout << "-----------------------\n";
}
}
return 0;
}