Pagini recente » Cod sursa (job #2427600) | Cod sursa (job #2566997) | Cod sursa (job #1354049) | Cod sursa (job #1602957) | Cod sursa (job #1443039)
#include <bits/stdc++.h>
using namespace std;
int n,a,b,t[300000],m,choice;
void build()
{
for(int i = n - 1; i > 0 ; --i) t[i] = max(t[i<<1], t[i<<1|1]);
}
void modify(int p, int v)
{
for(t[p += n] = v; p > 1 ; p>>=1) t[p>>1] = max(t[p], t[p^1]);
}
int query(int l, int r)
{
int ans = 0;
for(l += n, r+=n; l < r; l >>= 1, r >>= 1)
ans = max(ans, max( ((l&1) ? t[l++] : 0), ((r&1) ? t[--r] : 0)));
return ans;
}
int main()
{
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
scanf("%d%d", &n, &m);
for(int i = 0 ; i < n; i++) scanf("%d", t + n + i);
build();
for(int i = 0 ; i < m ; i++)
{
scanf("%d%d%d", &choice, &a, &b);
if(choice == 0) printf("%d\n", query(a-1,b));
else modify(a - 1, b);
}
return 0;
}