Pagini recente » Cod sursa (job #2522276) | Cod sursa (job #2459198) | Cod sursa (job #2603256) | Cod sursa (job #2850297) | Cod sursa (job #1970352)
#include <bits/stdc++.h>
using namespace std;
using uint = unsigned int;
using ll = long long;
using pii = pair<int, int>;
#define dbg(x) cerr<<#x": "<<(x)<<'\n'
#define dbg_v(x, n) cerr<<#x"[]: ";for(long long _=0;_<n;++_)cerr<<(x)[_]<<' ';cerr<<'\n'
#define all(v) v.begin(), v.end()
#define NMAX 100010
int st[2 * NMAX], n;
void build()
{
for(int i = n - 1; i >= 1; --i)
st[i] = max(st[i << 1], st[i << 1 | 1]);
}
int query(int l, int r)
{
++r;
int res;
for(res = -1, l += n, r += n; l < r; l >>= 1, r >>= 1)
{
if(l & 1) res = max(res, st[l]), ++l;
if(r & 1) --r, res = max(res, st[r]);
}
return res;
}
void update(int pos, int val)
{
for(st[pos += n] = val; pos > 1; pos >>= 1)
st[pos >> 1] = max(st[pos], st[pos ^ 1]);
}
int main()
{
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
ios_base::sync_with_stdio(false);
int i, m, type, a, b;
cin >> n >> m;
for(i = 0; i < n; ++i) cin >> st[i + n];
build();
while(m--)
{
cin >> type >> a >> b;
if(type == 0) cout << query(a - 1, b - 1) << '\n';
else update(a - 1, b);
}
return 0;
}