Cod sursa(job #3030596)

Utilizator PsyDuck1914Feraru Rares-Serban PsyDuck1914 Data 17 martie 2023 19:02:29
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>
#include <iostream>

using namespace std;

ifstream f ("arbint.in");
ofstream g ("arbint.out");

const int NMAX = 1e5;
int ain[4*NMAX+4];

void update(int nod, int st, int dr, int val, int poz){
    if(st == dr){
        ain[nod] = val;
        return;
    }
    
    int mij = (st + dr)/2;
    if(poz <= mij)
        update(2*nod, st, mij, val, poz);
    else update(2*nod+1, mij+1, dr, val, poz);
    ain[nod] = max(ain[2*nod], ain[2*nod+1]);
}

void query(int nod, int st, int dr, int &mx, int p, int u){
    if(st >= p and dr <= u){
        mx = max(mx, ain[nod]);
        return;
    }
    int mij = (st + dr)/2;
    if(p <= mij)
        query(2*nod, st, mij, mx, p, u);
    if(u > mij)
        query(2*nod+1, mij+1, dr, mx, p, u);
}

int main()
{
    int n, q;
    f >> n >> q;
    
    for(int i=1; i<=n; i++){
        int k;
        f >> k;
        update(1, 1, n, k, i);
    }
    
    for(int i=1; i<=q; i++){
        int t;
        f>>t;
        if(t == 1){
            int poz, val;
            f>>poz>>val;
            update(1, 1, n, val, poz);
        }else{
            int bg, end;
            f >> bg >> end;
            int maxim = -1;
            query(1, 1, n, maxim, bg, end);
            g << maxim << "\n";
        }
    }    
    
    return 0;
}