Pagini recente » Cod sursa (job #1656844) | Cod sursa (job #1777485) | Cod sursa (job #2703589) | Cod sursa (job #1346974) | Cod sursa (job #1442866)
#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()
{
FILE *in = fopen("arbint.in", "r");
FILE *out = fopen("arbint.out", "w");
fscanf(in, "%d %d ", &N, &M);
for (int i = 0; i < N; ++i)
fscanf(in, "%d ", &T[i + N]);
build();
for (int i = 1; i <= M; ++i)
{
int tip, a, b;
fscanf(in, "%d %d %d ", &tip, &a, &b);
a--; b--;
if (tip == 0)
fprintf(out, "%d\n", query(a, b + 1));
else
update(a, b + 1);
}
return 0;
}