Cod sursa(job #2754823)

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

using namespace std;

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

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

inline int Maxim(int a, int b) {
    if ( a > b ) return a;
    return b;
}

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] = Maxim(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<<"\n";
        }
        else{
            pos = A, val = B;
            Update(1,1,N);
        }
    }

    return 0;
}