Pagini recente » Cod sursa (job #2865583) | Cod sursa (job #70873) | Cod sursa (job #2467327) | Cod sursa (job #1043369) | Cod sursa (job #1246394)
#include <fstream>
#define IN "arbint.in"
#define OUT "arbint.out"
const int MAX = 100014 ;
using namespace std;
ifstream fin ( IN ) ;
ofstream fout ( OUT ) ;
int v [ MAX ] , arb [ 3 * MAX ] , l , r ;
void update ( int nod , int st , int dr , int poz ) ;
int query ( int nod , int st , int dr ) ;
int main()
{
int x , n , m ;
fin >> n >> m ;
for ( register int i = 1 ; i <= n ; ++ i )
fin >> v [ i ] ;
update ( 1 , 1 , n , 0 ) ;
for ( ; m ; -- m ){
fin >> x >> l >> r ;
if ( x ){
v [ l ] = r ;
update ( 1 , 1 , n , l ) ;
}
else
fout << query ( 1 , 1 , n ) << '\n' ;
}
return 0 ;
}
void update ( int nod , int st , int dr , int poz ) {
if ( dr == st )
arb [ nod ] = v [ st ] ;
else{
int mij = ( st + dr ) / 2 ;
if ( poz <= mij or !poz )
update ( 2 * nod , st , mij , poz ) ;
if ( poz > mij or !poz )
update ( 2 * nod + 1 , mij + 1 , dr , poz ) ;
arb [ nod ] = ( arb [ 2 * nod ] > arb [ 2 * nod + 1 ] ) ? arb [ 2 * nod ] : arb [ 2 * nod + 1 ] ;
}
}
int query ( int nod , int st , int dr ) {
if ( l <= st and dr <= r )
return arb [ nod ] ;
else{
int mij = ( st + dr ) / 2 ;
int maxl = 0 ;
int maxr = 0 ;
if ( l < mij )
maxl = query ( 2 * nod , st , mij ) ;
if ( r >= mij )
maxr = query ( 2 * nod + 1 , mij + 1 , dr ) ;
return ( maxl > maxr ) ? maxl : maxr ;
}
}