Cod sursa(job #2754569)

Utilizator bogdan2405Strat Bogdan-Valentin bogdan2405 Data 26 mai 2021 00:35:03
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.67 kb
#include<bits/stdc++.h>

using namespace std;

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

vector<int> arbint;

void arboreInterval(int nod, int stanga, int dreapta, int pozitie, int valoare){
    if(stanga==dreapta){
        arbint[nod]=valoare;
        return;
    }
    else{
        int mijloc;
        mijloc=(stanga+dreapta)/2;
        if(pozitie<=mijloc){
            arboreInterval(nod*2,stanga,mijloc,pozitie,valoare);
        }
        else{
            arboreInterval(nod*2+1,mijloc+1,dreapta,pozitie,valoare);
        }
        arbint[nod]=max(arbint[nod*2],arbint[nod*2+1]);

    }

}

void query(int nod, int stanga, int dreapta, int queryStanga, int queryDreapta,int &ans ){
    if(stanga>queryDreapta || dreapta<queryStanga){
        //return 0;
        return ;
    }
     if(stanga>=queryStanga && dreapta<=queryDreapta){
        //return arbint[nod];
        ans=arbint[nod];
        return;
    }

    int mijloc;
    mijloc=(stanga+dreapta)/2;
    if(queryStanga<=mijloc){
        return query(nod*2,stanga,mijloc,queryStanga,queryDreapta,ans);
    }
    else{
        return query(nod*2+1,mijloc+1,dreapta,queryStanga,queryDreapta,ans);
    }
}
int main(){
    arbint.assign(1000001,0);
    vector<int> v;
    int n,m,i,j,valoare,queryStanga,queryDreapta,ans;
    bool tip;
    f>>n>>m;
    for(i=0;i<n;++i){
        f>>valoare;
        arboreInterval(1,1,n,i+1,valoare);
    }
    for(i=0;i<m;++i){
        f>>tip>>queryStanga>>queryDreapta;
        if(tip==0){
            ans=0;
            query(1,1,n,queryStanga,queryDreapta,ans);
            g<<ans<<'\n';
        }
        else{
            arboreInterval(1,1,n,queryStanga,queryDreapta);
        }
    }
    return 0;
}