Cod sursa(job #2865345)

Utilizator FasoleboiTudor Gadalean Fasoleboi Data 8 martie 2022 19:05:31
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>
#define N 100010
using namespace std;

ifstream fin("arbint.in");
ofstream fout("arbint.out");

int n, m, arb[4*N], ma, val, pos, start, finish;

void update(int nod, int st, int dr){
    if(st==dr){
        arb[nod] = val;
    }else{
        int mij = (st+dr)/2;
        if(pos<=mij){
            update(2*nod, st, mij);
        }else{
            update(2*nod+1, mij+1, dr);
        }
        arb[nod] = max(arb[2*nod], arb[2*nod+1]);
    }

}

void query(int nod, int st, int dr){
    if(start <= st && dr <= finish){
        if(ma<arb[nod]){
            ma = arb[nod];
        }
    }else{
        int mij = (st+dr)/2;
        if(start<=mij){
            query(2*nod, st, mij);
        }
        if(finish>mij){
            query(2*nod+1, mij+1, dr);
        }
    }
}

int main(){
    fin>>n>>m;
    for(int i=1;i<=n;i++){
        fin>>val;
        pos = i;
        update(1, 1, n);
    }
    while(m--){
        int k, a, b;
        fin>>k>>a>>b;
        if(k==0){
            ma=-1;
            start = a; finish = b;
            query(1, 1, n);
            fout<<ma<<'\n';
        }else{
            pos = a; val = b;
            update(1, 1, n);
        }
    }
    return 0;
}