Cod sursa(job #2755247)

Utilizator bestman4111Tiberiu Niculae bestman4111 Data 26 mai 2021 21:52:48
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include<iostream>
#include<fstream>
using namespace std;

ifstream cit("arbint.in");
ofstream afis("arbint.out");

int N, M, a, b, nr, maximul, op;
int arb[400101];

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

void maxim(int poz, int st, int dr, int a, int b){
    if((a <= st) && (dr <= b)){
        maximul = max(maximul, arb[poz]);
        return;
    }
    int mij = (st + dr)/2;
    if(a <= mij){
        maxim(2*poz, st, mij, a, b);
    }
    if(mij < b){
        maxim(2*poz + 1, mij + 1, dr, a, b);
    }
}

int main()
{
    cit>>N>>M;
    for(int i = 1; i <= N; i++){
        cit>>nr;
        update(1, 1, N, i, nr);
    }
    for(int i = 1; i <= M; i++){
        cit>>op>>a>>b;
        if(op == 0){
            maximul = 0;
            maxim(1, 1, N, a, b);
            afis<<maximul<<"\n";
        }
        else{
            update(1, 1, N, a, b);
        }
    }
    return 0;
}