Pagini recente » Cod sursa (job #2979940) | Cod sursa (job #5887) | Profil florinhaja | Cod sursa (job #2397943) | Cod sursa (job #1249068)
#include <fstream>
#include <algorithm>
#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 [ 4 * MAX ] , l , r , maxim ;
void update ( int nod , int st , int dr , int poz ) ;
void 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{
maxim = -1 ;
query ( 1 , 1 , n ) ;
fout << maxim << '\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 ] ;
}
}
void query ( int nod , int st , int dr ) {
if ( l <= st and dr <= r ){
maxim = max ( maxim , arb [ nod ] ) ;
return ;
}
else{
int mij = ( st + dr ) / 2 ;
if ( l <= mij )
query ( nod << 1 , st , mij ) ;
if ( r > mij )
query ( ( nod << 1 ) + 1 , mij + 1 , dr ) ;
}
}