Pagini recente » Poliție | Cod sursa (job #713247) | Istoria paginii runda/selectie_emag_mediu_2016_runda2 | Cod sursa (job #372456) | Cod sursa (job #1567305)
#include <fstream>
using namespace std;
ifstream is("arbint.in");
ofstream os("arbint.out");
int N, Q, A, B, x, y, z, maxim;
int Arb[400001];
void Update(int node, int left, int right);
void Query(int node, int left, int right);
int main()
{
is >> N >> Q;
B = N;
for (int i = 1; i <= N; ++i)
{
is >> x;
A = i;
B = x;
Update(1,1,N);
}
for (int i = 1; i <= Q; ++i)
{
is >> z >> x >> y;
if (z == 0)
{
maxim = -9999999;
A = x;
B = y;
Query(1,1,N);
os << maxim << '\n';
}
else
{
A = x;
B = y;
Update(1,1,N);
}
}
is.close();
os.close();
}
void Update(int node, int left, int right)
{
if (left == right)
{
Arb[node] = B;
return;
}
int mid = (left + right)/2;
if (A <= mid)
Update(2*node, left, mid);
else
Update(2*node+1, mid+1, right);
Arb[node] = max(Arb[2*node],Arb[2*node+1]);
}
void Query(int node, int left, int right)
{
if (left >= A && right <= B)
{
maxim = max(maxim, Arb[node]);
return;
}
int mid = (left + right)/2;
if (A <= mid)
Query(2*node, left, mid);
if (B > mid)
Query(2*node+1, mid+1, right);
}