Cod sursa(job #1795087)

Utilizator c0mradec0mrade c0mrade Data 1 noiembrie 2016 23:14:31
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");

int n,m,ans,arb[400010];

inline void update(int poz, int x)
{
    arb[poz += n - 1] = x;
    for(poz >>= 1; poz; poz >>= 1)
        arb[poz] = max(arb[poz << 1], arb[poz << 1 | 1]);
}

inline int query(int st, int dr)
{
    int rez = -1;
    for(st += n - 1, dr += n; st < dr; st >>= 1, dr >>= 1)
    {
        if(st & 1)
            rez = max(rez, arb[st++]);
        if(dr & 1)
            rez = max(rez, arb[--dr]);
    }
    return rez;
}

int main()
{
    f>>n>>m;
    for(int i=1;i<=n;++i)
    {
        int x;
        f>>x;
        update(i, x);
    }
    for(int i=1;i<=m;++i)
    {
        int p,x,y;
        f>>p>>x>>y;
        if(p)
            update(x, y);
        else
        {
            g << query(x, y) << '\n';
        }
    }
    return 0;
}