Pagini recente » Cod sursa (job #2666019) | Cod sursa (job #29873) | Cod sursa (job #2433927) | Cod sursa (job #2252395) | Cod sursa (job #2355580)
#include <fstream>
using namespace std;
typedef unsigned int uint;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
void build(uint tree[], uint v[])
{
for (uint i = 0; i < tree[0]; ++i)
tree[i + tree[0]] = v[i];
for (uint i = tree[0] - 1; i > 0; --i)
tree[i] = max(tree[i << 1], tree[i << 1 | 1]);
}
void update(uint tree[], uint p, uint val)
{
p += tree[0];
tree[p] = val;
for (uint i = p >> 1; i > 0; i >>= 1)
{
tree[i] = max(tree[p], tree[p ^ 1]);
p = i;
}
}
uint query(uint tree[], uint l, uint r)
{
uint res = 0;
for (l += tree[0], r += tree[0]; l < r; l >>= 1, r >>= 1)
{
if (l & 1)
res = max(res, tree[l++]);
if (r & 1)
res = max(res, tree[--r]);
}
return res;
}
int main()
{
uint n,m;
fin >> n >> m;
uint v[n];
for (uint i = 0; i < n; ++i)
fin >> v[i];
uint tree[n << 1];
tree[0] = n;
build(tree, v);
for (uint t,a,b,i = 0; i < m; ++i)
{
fin >> t >> a >> b;
if (t)
update(tree, a - 1, b);
else
fout << query(tree, a - 1, b) << '\n';
}
}