Pagini recente » Cod sursa (job #1420873) | Cod sursa (job #1022525) | Cod sursa (job #1021140) | Cod sursa (job #1540200) | Cod sursa (job #2751742)
#include <fstream>
using namespace std;
int arbore[410000], 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()
{
ifstream f("arbint.in");
ofstream o("arbint.out");
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 << endl;
}
else
{
pos = a;
val = b;
Update(1, 1, N);
}
}
}