Pagini recente » Cod sursa (job #1952545) | Cod sursa (job #1829447) | Cod sursa (job #361387) | Cod sursa (job #2151385) | Cod sursa (job #2901114)
#include <iostream>
#include <fstream>
std::ifstream in("arbint.in");
std::ofstream out("arbint.out");
int tree[400000], v[100001], n, m, x, y, i;
void buildTree(int left, int right, int pos)
{
int mid = left + (right - left) / 2;
if (left == right)
{
tree[pos] = v[i];
return;
}
if (i <= mid)
{
buildTree(left, mid, 2 * pos + 1);
tree[pos] = std::max(tree[2 * pos + 1], tree[2 * pos + 2]);
}
if (i > mid)
{
buildTree(mid + 1, right, 2 * pos + 2);
tree[pos] = std::max(tree[2 * pos + 1], tree[2 * pos + 2]);
}
}
int maxTree(int left, int right, int pos)
{
if (x <= left && y >= right)
return tree[pos];
if (x > right || y < left)
return -2147483648;
int mid = left + (right - left) / 2;
return std::max(maxTree(left, mid, 2 * pos + 1), maxTree(mid + 1, right, 2 * pos + 2));
}
int main()
{
in >> n >> m;
for (i = 0; i < n; i++)
{
in >> v[i];
buildTree(0, n - 1, 0);
}
int op;
for (int j = 0; j < m; j++)
{
in >> op;
if (op == 0)
{
in >> x >> y;
x--;
y--;
out << maxTree(0, n - 1, 0) << '\n';
}
if (op == 1)
{
in >> i >> x;
i--;
v[i] = x;
buildTree(0, n - 1, 0);
}
}
return 0;
}