Cod sursa(job #2754814)

Utilizator Zamolxis25Sebastian Gradinaru Zamolxis25 Data 26 mai 2021 16:13:32
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>

using namespace std;

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

int N,M, MaxArb[400004], start, finish, val, pos, maxim;

void Update(int nod, int left, int right){
    if(left == right){
        MaxArb[nod] = val;
        return;
    }

    int div = (left+right)/2;
    if(pos <= div) Update(2*nod, left, div);
    else Update(2*nod+1, div+1, right);

    MaxArb[nod] = MaxArb[2*nod] > MaxArb[2*nod+1] ? MaxArb[2*nod] : MaxArb[2*nod+1];
}

void Query(int nod, int left, int right){
    if(start <= left && right <= finish){
        if(maxim < MaxArb[nod]) maxim = MaxArb[nod];
        return;
    }

    int div = (left + right)/2;
    if(start <= div) Query(2*nod, left, div);
    if(div < finish) Query(2*nod+1, div+1, right);
}

int main(){

    bool op;
    int A, B;

    fin>>N>>M;
    for(int i = 1; i<=N; i++){
        fin>>A;
        pos = i, val = A;
        Update(1,1,N);
    }
    for(int i = 1; i<=M; i++){
        fin>>op >> A >> B;
        if(!op){
            maxim = -1;
            start = A, finish = B;
            Query(1,1,N);

            fout<<maxim;
        }
        else{
            pos = A, val = B;
            Update(1,1,N);
        }
    }

    return 0;
}