Pagini recente » Cod sursa (job #1503760) | Cod sursa (job #2517070) | Cod sursa (job #1334484) | Cod sursa (job #583806) | Cod sursa (job #2026079)
#include <iostream>
#include <stdio.h>
using namespace std;
const int N = 1e5;
int q,a,b,n,m;
int t[2 * N];
int combine(int a,int b)
{
return max(a,b);
}
void build()
{
for (int i = n - 1; i > 0; i--)
t[i] = combine( t[i*2] , t[i*2+1] );
}
void modify(int p, int value)
{
for (t[p += n-1] = value; p > 1; p /= 2)
t[p/2] = combine( t[p] , t[p^1] );
}
int query(int l, int r)
{
int Sol = -1;
l += n-1;
r += n-1;
while( l <= r )
{
Sol = combine( Sol, combine(t[l],t[r]) );
l = (l+1)/2;
r = (r-1)/2;
}
return Sol;
}
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", &q, &a, &b);
if ( q == 0 )
printf ("%d \n", query(a,b) );
else
modify(a,b);
}
fclose (stdin), fclose (stdout);
return 0;
}