Pagini recente » Cod sursa (job #795827) | Cod sursa (job #1273293) | Cod sursa (job #623895) | Cod sursa (job #2414494) | Cod sursa (job #2039895)
#include <bits/stdc++.h>
using namespace std;
const int kMaxN = 1 << 17;
int T[kMaxN * 2];
int n, m;
void build(int x)
{
if (x >= n) return;
build(2 * x);
build(2 * x + 1);
T[x] = max(T[2 * x], T[2 * x + 1]);
}
void update(int k, int x)
{
k += n - 1;
T[k] = x;
k /= 2;
while (k >= 1) {
T[k] = max(T[2 * k], T[2 * k + 1]);
k /= 2;
}
}
int query(int a, int b)
{
a += n - 1; b += n - 1;
int ans = -numeric_limits<int>::max() / 2;
while (a <= b) {
if (a % 2 == 1) ans = max(ans, T[a++]);
if (b % 2 == 0) ans = max(ans, T[b--]);
a /= 2; b /= 2;
}
return ans;
}
int main()
{
freopen("arbint.in", "rt", stdin);
freopen("arbint.out", "wt", stdout);
cin >> n >> m;
int rn = 1;
for (rn = 1; rn < n; rn *= 2) ;
if (n == 1) rn = 1;
for (int i = 0; i < n; ++i) cin >> T[i + rn];
n = rn;
build(1);
while (m--) {
int t, a, b;
cin >> t >> a >> b;
if (t == 0) {
cout << query(a, b) << '\n';
} else {
update(a, b);
}
}
return 0;
}