Pagini recente » Cod sursa (job #2672745) | Cod sursa (job #51276) | Cod sursa (job #139599) | Cod sursa (job #1979281) | Cod sursa (job #1087405)
#include <fstream>
#define NMAX 100001
using namespace std;
ifstream fin ("arbint.in"); ofstream fout ("arbint.out");
int N, M, arb[4 * NMAX + 66], start, finish, val, pos, maxim;
inline int Maxim (int a, int b)
{
if (a > b) return a;
else return b;
}
void Update (int nod, int l, int r)
{
if (l == r)
{
arb[nod] = val;
return;
}
int m = (l + r) / 2;
if (pos <= m)
Update (2 * nod, l, m);
else
Update (2 * nod + 1, m + 1, r);
arb[nod] = Maxim (arb[2 * nod], arb[2 * nod + 1]);
}
void Query (int nod, int l, int r)
{
if (start <= l && r <= finish)
{
if (arb[nod] > maxim)
maxim = arb[nod];
return;
}
int m = (l + r) / 2;
if (start <= m)
Query (2 * nod, l, m);
if (m < finish)
Query (2 * nod + 1, m + 1, r);
}
int main ()
{
fin >> N >> M;
for (int i = 1, x; i <= N; ++i)
{
fin >> x;
pos = i;
val = x;
Update (1, 1, N);
}
for (int i = 1, x, a, b; i <= M; ++i)
{
fin >> x >> a >> b;
if (x == 0)
{
maxim = -1;
start = a;
finish = b;
Query (1, 1, N);
fout << maxim << "\n";
}
else
{
pos = a;
val = b;
Update (1, 1, N);
}
}
}