Cod sursa(job #2431048)

Utilizator AlexNeaguAlexandru AlexNeagu Data 17 iunie 2019 19:14:03
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#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;
}