Cod sursa(job #2122483)

Utilizator KemyKoTeo Virghi KemyKo Data 5 februarie 2018 10:13:15
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <fstream>
#define NMAX 200002

using namespace std;

ifstream f("arbint.in");
ofstream g("arbint.out");

int v[NMAX], n, m;
const int INF = 1e9;

void build()
{
    int i;
    for(i=1;i<=n;++i)
        f>>v[n+i-1];
    for(i=n-1;i>0;--i)
        v[i]=max(v[i<<1], v[i<<1|1]);   //i/2 i/2+1
}

void update(int p, int x)
{
    p+=n-1;
    v[p]=x;
    p>>=1;
    for(;p>0;p>>=1)
        v[p]=max(v[p<<1], v[p<<1|1]);
}

int query(int a, int b)
{
    int rez=-INF;
    a+=n-1;
    b+=n;   //b+=n-1+1;
    for(;a<b;a>>=1,b>>=1){
        if(a&1)rez=max(rez, v[a++]);
        if(b&1)rez=max(rez, v[--b]);
    }
    return rez;
}

int main()
{
    int i, op, a, b;
    f>>n>>m;

    build();

    for(i=1;i<=m;i++){
        f>>op>>a>>b;

        if(op==0) g<<query(a, b)<<'\n';
        else update(a, b);
    }

return 0;
}