Pagini recente » Cod sursa (job #2550653) | Cod sursa (job #1017435) | Cod sursa (job #2919757) | Cod sursa (job #1952797) | Cod sursa (job #2431048)
#include <fstream>
#include <vector>
#define nmax 100005
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
vector < int > tree(nmax * 2);
int n, m, op, x, y, i, j;
void update(int p, int val)
{
for (tree[p += n] = val; p > 1; p >>= 1) tree[p >> 1] = max (tree[p], tree[p ^ 1]);
}
int query(int l, int r)
{
int mx = -10;
for (l += n, r += n; l < r; l >>= 1, r >>= 1)
{
if (l & 1) mx = max(mx, tree[l++]);
if (r & 1) mx = max(mx, tree[--r]);
}
return mx;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n >> m;
for (i = 0; i < n; i++) cin >> tree[n + i];
for (i = n - 1; i > 0; i--) tree[i] = max(tree[i << 1], tree[i << 1 | 1]);
while (m--)
{
cin >> op >> x >> y;
x--;
if (!op) {int val = query(x, y); cout << val << "\n";}
else update(x, y);
}
return 0;
}