Cod sursa(job #2941720)

Utilizator Dobricean_IoanDobricean Ionut Dobricean_Ioan Data 18 noiembrie 2022 09:25:39
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <fstream>  
#include <iostream>

using namespace std;

ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
int n,m,ma;
int aint[4*100001];


void build(int nod, int st, int dr) {
   
    if(st == dr) {
       fin >>aint[nod];
    return;
    }
    int mij = (st + dr)>> 1;

    build(nod*2, st,mij);
    build(nod*2+1,mij+1,dr);
    aint[nod] = max(aint[nod*2],aint[nod*2+1]);   

}

void query(int nod, int st, int dr, int l, int r) {

    if(l <= st  && r >= dr) {
        ma = max(ma, aint[nod]);
        return;
    }
    int mij = (st + dr) >>1;
    if(l <= mij) 
        query(nod*2, st, mij, l, r);
    if(r > mij) 
        query(nod*2+1, mij+1,dr, l,r);

}


void update(int nod, int st, int dr, int poz, int val) {

    if(st == dr) {
        aint[nod] = val;
        return;
    }
    int mij = (st + dr) >> 1;
    if(poz <= mij) 
        update(nod*2,st,mij,poz,val);
    if(poz > mij) 
        update(nod*2+1,mij+1,dr,poz,val);
    aint[nod] = max(aint[nod*2],aint[nod*2+1]);
}
int main() {

    fin >> n >> m;
   build(1,1,n);
    for ( int i = 1,t,x,y; i <= m; ++i){
        fin >> t >> x >> y;
        if(t == 0)
            {
                ma = 0;
                query(1,1,n,x,y);
                fout << ma << "\n";
            }
        else update(1,1,n,x,y);
    }

}