Pagini recente » Cod sursa (job #2581289) | Cod sursa (job #993380) | Istoria paginii runda/16_februarie_simulare_oji_2024_clasa_9 | Cod sursa (job #2635866) | Cod sursa (job #2751757)
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream o("arbint.out");
int arbore[200000], N, M, X, a, b, start, sfarsit,pos, val, maxim;
void Update(int nod, int st, int dr)
{
if (st == dr)
{
arbore[nod] = val;
return;
}
int mij = (st + dr) / 2;
if (pos <= mij)
Update(2 * nod, st, mij);
else
Update(2 * nod + 1, mij + 1, dr);
arbore[nod] = max(arbore[2 * nod], arbore[2 * nod + 1]);
}
void Query(int nod, int st, int dr)
{
if (start <= st && dr <= sfarsit)
{
if (maxim < arbore[nod])
maxim = arbore[nod];
return;
}
int mij = (st + dr) / 2;
if (start <= mij)
Query(2 * nod, st, mij);
if (mij < sfarsit)
Query(2 * nod + 1, mij + 1, dr);
}
int main()
{
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;
sfarsit = b;
Query(1, 1, N);
o << maxim << "\n";
}
else
{
pos = a;
val = b;
Update(1, 1, N);
}
}
}