Cod sursa(job #1882325)

Utilizator TrascaAndreiTrasca Andrei TrascaAndrei Data 17 februarie 2017 09:30:59
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("arbint.in");
ofstream fout("arbint.out");
const int Max = 100001;

int n,m,arb[2*Max],t,a,b;

void update(int poz,int val){
    poz+=n-1;
    arb[poz]=val;
    int aux;
    while(poz>1){
        aux=poz/2;
        arb[aux]=max(arb[poz],arb[poz^1]);
        poz=aux;
    }
}

int query(int st,int dr){
    int rez=0;
    st+=n-1;
    dr+=n-1;
    while(st<=dr){
        rez=max(rez,max(arb[st],arb[dr]));
        st=(st+1)/2;
        dr=(dr-1)/2;
    }
    return rez;
}

int main()
{
    fin>>n>>m;
    int i;
    for(i=0;i<n;i++)
        fin>>arb[n+i];
    for(i=n-1;i;i--)
        arb[i]=max(arb[2*i],arb[2*i+1]);
    for(i=1;i<=m;i++){
        fin>>t>>a>>b;
        if(t==0)
            fout<<query(a,b)<<'\n';
        else
            update(a,b);
    }
    return 0;
}