Pagini recente » Cod sursa (job #1569859) | Cod sursa (job #3288286) | Cod sursa (job #2476865) | Cod sursa (job #2439810) | Cod sursa (job #2221986)
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
const int nmax = 100005;
int n, m, i, a[nmax], mij;
int arb[4*nmax], gx, gy, val, maxim, tip;
void update(int cod, int st, int dr)
{
if( gx <= st && gy >=dr )
{
arb[cod] = val;
return;
}
mij = (st+dr)/2;
if ( gx <= mij )
update ( 2*cod, st, mij );
if ( gy > mij )
update ( 2*cod+1, mij+1, dr );
arb[cod] = max(arb[2*cod], arb[2*cod+1]);
}
void query(int cod, int dr, int st)
{
if( gx <= st && gy >= dr)
{
maxim = (maxim, arb[cod]);
return;
}
mij = ( st+dr )/2;
if( gx <= mij )
query( 2*cod, st, mij);
if( gy > mij )
query( 2*cod+1, mij+1, dr);
}
int main()
{
f >> n >> m;
for ( int i = 1 ; i <= n ; i++ )
f >> a[i];
for ( i = 1 ; i <= n ; i++ )
{
gx = gy = i ;
val = a[i];
update( 1, 1, n);
}
while ( m > 0 ) {
f >> tip;
if( tip == 0 )
{
f >> gx >> gy;
maxim = 0;
query (1, 1, n);
g << maxim <<" ";
}
else
{
f >> gx >> val;
gx = gy;
update ( 1, 1, n );
}
m--;
}
return 0;
}