Pagini recente » Cod sursa (job #341608) | Cod sursa (job #3254652) | Cod sursa (job #1432681) | Cod sursa (job #258685) | Cod sursa (job #1394016)
#include <fstream>
using namespace std;
#define dim 100010
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int Arb[4*dim],i,j,n,m,pos,x,y,val,q,ans,start,finish;
void _Update(int nod, int left, int right)
{
if( left == right )
{
Arb[ nod ] = val;
return;
}
int middle = ( left + right ) / 2;
if( pos <= middle )
_Update( 2 * nod , left , middle );
else
_Update( 2 * nod + 1 , middle + 1 , right );
Arb[ nod ] = max( Arb[ 2 * nod ] , Arb[ 2 * nod + 1 ] );
}
void _Query(int nod, int left, int right)
{
if( left >= start && right <= finish )
{
if( ans < Arb[ nod ] )
ans = Arb[ nod ];
return;
}
if( left == right )
return;
int middle = ( left + right ) / 2;
if( start <= middle )
_Query( 2 * nod , left , middle );
if( middle < right)
_Query( 2 * nod + 1 , middle + 1 , right );
}
int main()
{
fin>>n>>m;
for(i=1 ; i<=n ; ++i)
{
fin>>x;
pos = i;
val = x;
_Update( 1 , 1 , n );
}
for(i=1 ; i<=m ; ++i)
{
fin>>q>>x>>y;
if( q == 1 )
{
pos = x;
val = y;
_Update( 1 , 1 , n );
}
else
{
ans = -1;
start = x;
finish = y;
_Query( 1 , 1 , n );
fout<<ans<<'\n';
}
}
return 0;
}