Cod sursa(job #1443039)

Utilizator NP-CompeteMuhamed Keta NP-Compete Data 26 mai 2015 18:17:06
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <bits/stdc++.h>
using namespace std;

int n,a,b,t[300000],m,choice;

void build()
{
    for(int i = n - 1; i > 0 ; --i) t[i] = max(t[i<<1], t[i<<1|1]);
}

void modify(int p, int v)
{
    for(t[p += n] = v; p > 1 ; p>>=1) t[p>>1] = max(t[p], t[p^1]);
}

int query(int l, int r)
{
    int ans = 0;
    for(l += n, r+=n; l < r; l >>= 1, r >>= 1)
        ans = max(ans, max( ((l&1) ? t[l++] : 0), ((r&1) ? t[--r] : 0)));
    return ans;
}

int main()
{
    freopen("arbint.in", "r", stdin);
    freopen("arbint.out", "w", stdout);
    scanf("%d%d", &n, &m);
    for(int i = 0 ; i < n; i++) scanf("%d", t + n + i);

    build();

    for(int i = 0 ; i < m ; i++)
    {
        scanf("%d%d%d", &choice, &a, &b);
        if(choice == 0) printf("%d\n", query(a-1,b));
        else modify(a - 1, b);
    }
    return 0;
}