Cod sursa(job #1795095)

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

int n,m,ans,arb[400010];
char D;
int number;

inline int get_nr()
{
    number = 0;

    D = getc(stdin);
    while(!isdigit(D))
    {
        D = getc(stdin);
    }

    while (isdigit(D))
    {
        number = number * 10 + D - '0';
        D = getc(stdin);
    }

    return number;
}

int main()
{
    freopen("arbint.in", "r", stdin);
    //f>>n>>m;
    n=get_nr();
    m=get_nr();
    for(int i=1;i<=n;++i)
    {
        int x;
        x=get_nr();
        int poz = i;
        arb[poz += n - 1] = x;
        for(poz >>= 1; poz; poz >>= 1)
            arb[poz] = max(arb[poz << 1], arb[poz << 1 | 1]);
    }
    for(int i=1;i<=m;++i)
    {
        int p,x,y;
        //f>>p>>x>>y;
        p=get_nr();
        x=get_nr();
        y=get_nr();
        if(p)
        {
            arb[x += n - 1] = y;
            for(x >>= 1; x; x >>= 1)
                arb[x] = max(arb[x << 1], arb[x << 1 | 1]);
        }
        else
        {
            int rez = -1;
            for(x += n - 1, y += n; x < y; x >>= 1, y >>= 1)
            {
                if(x & 1)
                    rez = max(rez, arb[x++]);
                if(y & 1)
                    rez = max(rez, arb[--y]);
            }
            g << rez << '\n';
        }
    }
    return 0;
}