Pagini recente » Cod sursa (job #298321) | Cod sursa (job #671912) | Cod sursa (job #2892590) | Cod sursa (job #2229321) | Cod sursa (job #1206277)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream is("arbint.in");
ofstream os("arbint.out");
typedef int Arbore;
int N, M;
int x, y, z, P1, P2;
int maxim;
Arbore A[400001];
void Update(int node, int left, int right);
void Query(int node, int left, int right);
int main()
{
is >> N >> M;
for ( int i = 1; i <= N; ++i )
{
is >> x;
P1 = i; P2 = x;
Update(1,1,N);
}
for ( int i = 1; i <= M; ++i )
{
is >> z >> x >> y;
if ( z == 0 )
{
maxim = -1;
P1 = x;
P2 = y;
Query(1,1,N);
os << maxim << '\n';
}
if ( z == 1 )
{
P1 = x;
P2 = y;
Update(1,1,N);
}
}
}
void Update(int node, int left, int right)
{
if ( left == right )
{
A[node] = P2;
return;
}
int Mid = (left+right)/2;
if ( P1 <= Mid )
Update(2*node,left,Mid);
else
Update(2*node+1,Mid+1,right);
A[node] = max(A[2*node],A[2*node+1]);
}
void Query(int node, int left, int right)
{
if ( P1 <= left && P2 >= right )
{
if ( maxim <= A[node] )
maxim = A[node];
return;
}
int Mid = (left+right)/2;
if ( P1 <= Mid ) Query(2*node,left,Mid);
if ( P2 > Mid ) Query(2*node+1,Mid+1,right);
}