Pagini recente » Cod sursa (job #2334076) | Cod sursa (job #1530872) | Cod sursa (job #1330189) | Cod sursa (job #718979) | Cod sursa (job #1742564)
#include <fstream>
#define dim 100001
using namespace std;
ifstream f ("arbint.in");
ofstream g ("arbint.out");
int arb[4*dim+67];
int start, finish, val, pos, maxim, N, M;
void Update(int nod, int st, int dr)
{
if ( st == dr )
{
arb[nod] = val;
return;
}
int div = (st+dr)/2;
if ( pos <= div ) Update(2*nod,st,div);
else Update(2*nod+1,div+1,dr);
arb[nod] = max( arb[2*nod], arb[2*nod+1] );
}
void Query(int nod, int st, int dr)
{
if ( start <= st && dr <= finish )
{
if ( maxim < arb[nod] ) maxim = arb[nod];
return;
}
int div = (st+dr)/2;
if ( start <= div ) Query(2*nod,st,div);
if ( div < finish ) Query(2*nod+1,div+1,dr);
}
int main()
{
int x, a, b;
f>>N>>M;
for ( int i = 1; i <= N; i++ )
{
f>>x;
pos = i, val = x;
Update(1,1,N);
}
for ( int i = 1; i <= M; i++ )
{
f>>x>>a>>b;
if ( x == 0 )
{
maxim = -1;
start = a, finish = b;
Query(1,1,N);
g<<maxim<<'\n';
}
else
{
pos = a, val = b;
Update(1,1,N);
}
}
}