Pagini recente » Cod sursa (job #114026) | Cod sursa (job #2663934) | Cod sursa (job #747985) | Cod sursa (job #2460760) | Cod sursa (job #1408867)
#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n, m, i, a, b, q;
int Arb[ 2 * 100000 + 50 ], limit_s, limit_d, pos, val;
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 ] );
}
int _Maxim( int nod , int left , int right )
{
if ( left > limit_d || right < limit_s )
return -1;
int middle = ( left + right ) / 2;
if ( left >= limit_s && right <= limit_d )
return Arb[ nod ];
return max( _Maxim( 2 * nod , left , middle ),_Maxim( 2 * nod + 1 , middle + 1 , right ) );
}
int main()
{
fin>>n>>m;
for ( i=1 ; i<=n ; i++ )
{
pos = i;
fin>>val;
_Update( 1 , 1 , n );
}
for ( i=1 ; i<=m ; i++ )
{
fin>>q>>a>>b;
if (q==0)
{
limit_s=a;
limit_d=b;
fout<<_Maxim( 1 , 1 , n )<<'\n';
}
else
{
pos=a;
val=b;
_Update( 1 , 1 , n );
}
}
return 0;
}