Pagini recente » Cod sursa (job #891279) | Cod sursa (job #184560) | Cod sursa (job #2152502) | Cod sursa (job #3203976) | Cod sursa (job #1504928)
#include <fstream>
using namespace std;
const int NMAX= 100000, N2MAX= 131072, INF= (1 << 30);
ifstream in( "arbint.in" );
ofstream out( "arbint.out" );
int arb[N2MAX*2];
int calc_N2( int N )
{
int x= 1;
while( x<N )
{
x*=2;
}
return x;
}
int query( int nod, int lq, int rq, int ln, int rn )
{
int ans1, ans2;
if( ln >= lq && rn <= rq )
{
return arb[nod];
}
if( ln > rq || rn < lq )
{
return -INF;
}
ans1= query( nod*2, lq, rq, ln, (rn+ln)/2 );
ans2= query( nod*2+1, lq, rq, (rn+ln)/2+1, rn );
return max( ans1, ans2 );
}
int main( )
{
int N, M;
in >> N >> M;
int N2= calc_N2(N);
for( int i= N2; i<=N2+N-1; ++i )
{
in >> arb[i];
}
for( int i= N2+N; i<=N2*2-1; ++i )
{
arb[i]= -INF;
}
for( int i= N2-1; i>=1; --i )
{
arb[i]= max( arb[i*2], arb[i*2+1] );
}
for( int q= 1; q<=M; ++q )
{
int a, b, c;
in >> a >> b >> c;
if( a==1 )
{
int aux= (N2-1+b)/2;
arb[N2-1+b]= c;
while(aux>=1)
{
arb[aux]= max( arb[aux*2], arb[aux*2+1] );
aux/=2;
}
}
else
{
out << query( 1, b, c, 1, N2 ) << '\n';
}
}
return 0;
}