Cod sursa(job #2311982)

Utilizator SemetgTemes George Semetg Data 3 ianuarie 2019 22:44:21
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#define FILE_NAME "arbint"
#define N_MAX 100005
using namespace std;

ifstream in (FILE_NAME".in");
ofstream out (FILE_NAME".out");

int N;
int arb[4 * N_MAX];
int A, B;

int query(int stg, int drp, int nod) {
    if (drp < A || B < stg)
        return 0;
    if (A <= stg && drp <= B)
        return arb[nod];
    
    int mij = (stg + drp) / 2;
    return max(
               query(stg, mij, 2 * nod),
               query(mij + 1, drp, 2 * nod + 1)
               );
}

void update(int stg, int drp, int nod) {
    if (stg == drp) {
        arb[nod] = B;
        return;
    }
    
    int mij = (stg + drp) / 2;
    if (stg <= A && A <= mij)
        update(stg, mij, 2 * nod);
    else
        update(mij + 1, drp, 2 * nod + 1);
    
    arb[nod] = max(arb[2 * nod], arb[2 * nod + 1]);
}

int main() {
    int m;
    in >> N >> m;
    
    for (int i = 1; i <= N; ++i) {
        int x;
        in >> x;
        A = i;
        B = x;
        
        update(1, N, 1);
    }
    
    while (m--) {
        int cod;
        in >> cod >> A >> B;
        
        if (!cod)
            out << query(1, N, 1) << '\n';
        else
            update(1, N, 1);
    }
}