Cod sursa(job #2940160)

Utilizator PsyDuck1914Feraru Rares-Serban PsyDuck1914 Data 14 noiembrie 2022 22:10:53
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>
#include <iostream>

using namespace std;

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

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


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[nod*2], ain[nod*2+1]);
}

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

int main()
{
    f>>n>>q;
    for(int i=1; i<=n; i++){
        int val;
        f>>val;
        update(1, 1, n, val, 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;
}