Pagini recente » Cod sursa (job #2521782) | Cod sursa (job #1446806) | Cod sursa (job #1674646) | Cod sursa (job #2265579)
#include <cstdio>
#define MAXN 100000
using namespace std;
int aint[4*MAXN+5];
int k, a, b, ans;
inline int maxim( int x, int y )
{
if( x<y )
x=y;
return x;
}
void update( int p, int st, int dr )
{
int mid=(st+dr)/2;
if( st==dr )
aint[p]=b;
else
{
if( a<=mid )
update(2*p,st,mid);
else
update(2*p+1,mid+1,dr);
aint[p]=maxim(aint[2*p],aint[2*p+1]);
}
}
void query( int p, int st, int dr )
{
int mid=(st+dr)/2;
if( a<=st && dr<=b )
ans=maxim(ans,aint[p]);
else
{
if( a<=mid )
query(2*p,st,mid);
if( mid<b )
query(2*p+1,mid+1,dr);
}
}
int main()
{
freopen( "arbint.in", "r", stdin );
freopen( "arbint.out", "w", stdout );
int n, m;
scanf( "%d%d", &n, &m );
for( int i=1;i<=n;i++ )
{
scanf( "%d", &k );
b=k;
a=i;
update(1,1,n);
}
for( int i=1;i<=m;i++ )
{
scanf( "%d%d%d", &k, &a, &b );
if( k )
update(1,1,n);
else
{
ans=0;
query(1,1,n);
printf( "%d\n", ans );
}
}
return 0;
}