Cod sursa(job #2863922)

Utilizator FasoleboiTudor Gadalean Fasoleboi Data 7 martie 2022 13:47:58
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <fstream>
#define N 100001
using namespace std;

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

int n, m, arb[4*N+66], x, y, z, ma, val, pos, start, finish;

void update(int nod, int st, int dr){
    if(st==dr){
        arb[nod] = val;
        return;
    }
    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];
            return;
        }
    }
    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--){
        fin>>z>>x>>y;
        if(z==0){
            ma=-1;
            start = x; finish = y;
            query(1, 1, n);
            fout<<ma<<'\n';
        }else{
            pos = x; val = y;
            update(1, 1, n);
        }
    }
    return 0;
}