Pagini recente » Cod sursa (job #2735891) | Cod sursa (job #2442867) | Cod sursa (job #2107428) | Cod sursa (job #20850) | Cod sursa (job #1821580)
#include <cstdio>
#include <algorithm>
using namespace std;
int n, m, tip, a, b, ans, v[400000];
void query (int nod, int st, int dr)
{
int mij = (dr+st)/2;
if (a<=st && b>=dr){
ans = max (ans, v[nod]);
return ;
}
if (a <= mij){
query (nod*2, st, mij);
}
if (mij < b){
query (nod*2+1, mij+1, dr);
}
}
void update (int y, int z)
{
int x = n+y-1;
v[x] = z;
x /= 2;
while (max(v[x*2], v[x*2+1]) != v[x] && x>0){
v[x] = max(v[x*2], v[x*2+1]);
x /= 2;
}
}
int main ()
{
freopen ("arbint.in", "r", stdin);
freopen ("arbint.out", "w", stdout);
scanf ("%d %d", &n, &m);
tip = 1;
while (tip < n){
tip *= 2;
}
for (int i=tip; i<tip+n; i++){
scanf ("%d", &v[i]);
}
n = tip;
for (int i=n-1; i>0; i--){
v[i] = max (v[i*2], v[i*2+1]);
}
for (int i=1; i<=m; i++){
scanf ("%d %d %d", &tip, &a, &b);
if (tip == 0){
ans = 0;
query (1, 1, n);
printf ("%d\n", ans);
}
else{
update (a, b);
}
}
return 0;
}