Pagini recente » Cod sursa (job #1680983) | Cod sursa (job #2586217) | Cod sursa (job #2455706) | Cod sursa (job #2770873) | Cod sursa (job #1442864)
#include <bits/stdc++.h>
using namespace std;
const int Nmax = 100000 + 1;
int T[2 * Nmax];
int N, M;
void build()
{
for (int i = N - 1; i >= 1; i--)
T[i] = max(T[(i << 1)], T[(i << 1) | 1]);
}
void update(int x, int value)
{
x += N;
T[x] = value;
while (x > 1)
{
T[x >> 1] = max(T[x], T[x ^ 1]);
x >>= 1;
}
}
int query(int x, int y) /// [x, y)
{
x += N;
y += N;
int sol = numeric_limits<int>::min();
while (x < y)
{
if (x & 1)
{
sol = max(sol, T[x]);
x++;
}
if (y & 1)
{
y--;
sol = max(sol, T[y]);
}
x >>= 1;
y >>= 1;
}
return sol;
}
int main()
{
ifstream in("arbint.in");
ofstream out("arbint.out");
in >> N >> M;
for (int i = 0; i < N; ++i)
in >> T[i + N];
build();
for (int i = 1; i <= M; ++i)
{
int tip, a, b;
in >> tip >> a >> b;
a--; b--;
if (tip == 0)
out << query(a, b + 1) << "\n";
else
update(a, b + 1);
}
return 0;
}