Cod sursa(job #2754069)

Utilizator MihaelaDanilaDanila Mihaela MihaelaDanila Data 24 mai 2021 23:25:24
Problema Arbori de intervale Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n,m;
int arbore[4000];
int maxi;

void query(int nod, int a, int b, int st, int dr){
    if(st<=a && b<=dr){
        if(maxi < arbore[nod]){
            maxi = arbore[nod];
        }
        return;
    }
    int mij;
    mij = (a+b)/2;
    if(st<=mij){
        query(nod*2,a,mij,st,dr);
    }
    if(mij<dr){
        query(nod*2+1,mij+1,b,st,dr);
    }
}

void update(int nod, int val, int a, int b, int poz){
    if(a==b){
        arbore[nod]=val;
        return;
    }
    int mij;
    mij = (a+b)/2;

    if(poz<=mij){
        update(nod*2,val,a,mij,poz);
    }else{
        update(nod*2+1,val,mij+1,b,poz);
    }

    if(arbore[nod*2] > arbore[nod*2+1]){
        arbore[nod] = arbore[nod*2];
    }else{
        arbore[nod] = arbore[nod*2+1];
    }
}

int main(){
    int val, operatie, a, b;
    f>>n>>m;
    for(int i=1;i<=n;i++){
        f>>val;
        update(1,val,1,n,i);
    }
    for(int i=0;i<m;i++){
        f>>operatie>>a>>b;
        if(operatie==0){
            maxi=0;
            query(1,1,n,a,b);
            g<<maxi<<"\n";
        }
        if(operatie==1){
            update(1,b,1,n,a);
        }
    }
    return 0;
}