Pagini recente » Cod sursa (job #1606831) | Cod sursa (job #2462034) | Borderou de evaluare (job #1567669) | Cod sursa (job #2215819) | Cod sursa (job #2377085)
#include <fstream>
#define N 100001
using namespace std;
typedef unsigned int uint;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
uint n,m,v[N],tree[2*N];
void build()
{
for (uint i = 0; i < n; ++i)
tree[i + n] = v[i];
for (uint i = n - 1; i > 0; --i)
tree[i] = max(tree[i << 1], tree[i << 1 | 1]);
}
void update(uint a, uint b)
{
tree[a += n] = b;
while (a > 0)
{
tree[a >> 1] = max(tree[a], tree[a ^ 1]);
a >>= 1;
}
}
/// [l,r)
uint query(uint l, uint r)
{
uint ma = 0;
for (l += n, r += n; l < r; l >>= 1, r >>= 1)
{
if (l & 1)
ma = max(ma, tree[l++]);
if (r & 1)
ma = max(ma, tree[--r]);
}
return ma;
}
int main()
{
fin >> n >> m;
for (uint i = 0; i < n; ++i)
fin >> v[i];
build();
for (uint c,a,b,i = 0; i < m; ++i)
{
fin >> c >> a >> b;
if (c == 1)
update(a - 1, b);
else
fout << query(a - 1, b) << '\n';
}
}