Pagini recente » Cod sursa (job #2009383) | Istoria paginii runda/pq | Istoria paginii runda/meow1/clasament | Cod sursa (job #213735) | Cod sursa (job #1965464)
#include <fstream>
using namespace std;
ifstream fi("arbint.in");
ofstream fo("arbint.out");
#define dim 100001
int N, M;
int MaxArb[4*dim];
int A,B, Val, Pos, maxim;
void Update(int nod, int left, int right)
{
if ( left == right ) { MaxArb[nod] = Val; return; }
int div = (left+right)/2;
if ( Pos <= div ) Update(2*nod,left,div);
else Update(2*nod+1,div+1,right);
MaxArb[nod] = max( MaxArb[2*nod], MaxArb[2*nod+1] );
}
void Query(int nod, int left, int right)
{
if ( A <= left && right <= B )
{ if ( maxim < MaxArb[nod] ) maxim = MaxArb[nod];
return;
}
int div = (left+right)/2;
if ( A <= div ) Query(2*nod,left,div);
if ( div < B) Query(2*nod+1,div+1,right);
}
int main()
{
int X;
fi>>N>>M;
for ( int i = 1; i <= N; i++ )
{
fi>>X;
Pos = i, Val = X;
Update(1,1,N);
}
for ( int i = 1; i <= M; i++ )
{
fi>>X>>A>>B;
if ( X == 0 )
{
maxim = -1;
Query(1,1,N);
fo<<maxim<<'\n';
}
else
{
Pos = A, Val = B;
Update(1,1,N);
}
}
}