Pagini recente » Cod sursa (job #2686355) | Cod sursa (job #701263) | Cod sursa (job #211850) | Cod sursa (job #1060447) | Cod sursa (job #2606143)
#define fisier "arbint"
#include <fstream>
std::ifstream in(fisier ".in");
std::ofstream out(fisier ".out");
const int
N = 100000,
M = N,
LOG2N = 18;
int n, m, v[LOG2N][N], pow2[LOG2N];
#include <algorithm>
int main()
{
in >> n >> m;
for (int i = 0; i < n; i++)
in >> (*v)[i];
for (int exp = 0; (1 << (exp+1)) <= n; exp++)
for (int i = 0; i < n; i++)
v[exp+1][i] = std::max(v[exp][i], v[exp][i + (1 << exp)]);
for (int i = 0; i < LOG2N; i++)
pow2[i] = 1 << i;
while (m--)
{
bool q; in >> q;
int a, b; in >> a >> b; a--;
if (q)
{
(*v)[a] = b;
for (int exp = 1; (1 << exp) <= n; exp++)
for (int i = 1 << exp; i--;)
v[exp][a - i] = std::max(v[exp-1][a - i], v[exp-1][a - i + (1 << (exp-1))]);
}
else
{
int
lun = b - a,
exp = std::upper_bound(pow2, pow2 + LOG2N, lun) - 1 - pow2;
out << std::max(v[exp][a], v[exp][b - (1 << exp)]) << '\n';
}
}
}