Pagini recente » Cod sursa (job #687385) | Cod sursa (job #2166361) | Cod sursa (job #414250) | Cod sursa (job #1459194) | Cod sursa (job #2547704)
#include <bits/stdc++.h>
#define Nmax 400005
using namespace std;
ifstream fin ( "arbint.in" );
ofstream fout ( "arbint.out" );
vector < int > v;
vector < int > ST;
void Read ( );
void Fac_ST ( int st, int dr, int pos );
int Search_ST ( int st, int dr, int pos );
void Update_ST ( int st, int dr, int pos );
int n, m, vpos, val, x, y;
int main ( )
{
Read ( );
}
int Search_ST ( int st, int dr, int pos )
{
if ( st >= x && y >= dr )
return ST[pos];
int mij = ( st + dr ) / 2;
int max1 = 0, max2 = 0;
if ( x <= mij )
max1 = Search_ST ( st, mij, pos*2 );
if ( y >= mij+1 )
max2 = Search_ST ( mij+1, dr, pos*2+1 );
return max ( max1, max2 );
}
void Update_ST ( int st, int dr, int pos )
{
if ( st == dr )
ST[pos] = val;
else
{
int mij = ( st + dr ) / 2;
if ( vpos <= mij )
Update_ST ( st, mij, pos*2 );
else
Update_ST ( mij+1, dr, (pos*2)+1 );
ST[pos] = max ( ST[pos*2], ST[(pos*2)+1] );
}
return ;
}
void Fac_ST ( int st, int dr, int pos )
{
if ( st == dr )
ST[pos] = v[st];
else
{
int mij = ( st + dr ) / 2;
Fac_ST ( st, mij, pos*2 );
Fac_ST ( mij+1, dr, (pos*2)+1 );
ST[pos] = max ( ST[pos*2], ST[(pos*2)+1] );
}
return ;
}
void Read ( )
{
int task;
fin >> n >> m;
v.reserve ( n+1 ) ;
v.push_back ( 0 );
for ( int i = 1; i <= n; i++ )
{
fin >> x;
v.push_back ( x );
}
ST.reserve( 4*(n+1) );
Fac_ST ( 1, n, 1 );
for ( int i = 1; i <= m; i++ )
{
fin >> task >> x >> y;
if ( task == 0 )
fout << Search_ST ( 1, n, 1 ) << '\n';
else
{
vpos = x;
val = y;
Update_ST ( 1, n, 1 );
}
}
}