Cod sursa(job #2701248)

Utilizator SoranaAureliaCatrina Sorana SoranaAurelia Data 30 ianuarie 2021 11:18:23
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
using namespace std;

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

int n, m, a[400001];
int tip, x, y;

void adaugare(int st, int dr, int i, int poz){
    if(st==dr || st>dr){
        a[poz]=x;
        return;
    }
    int mij=(st+dr)/2;
    if(i>mij){
        adaugare(mij+1, dr, i, poz*2+1);
    }
    else adaugare(st, mij, i, poz*2);
    a[poz]=max(a[poz*2], a[poz*2+1]);

}

int maxim(int st, int dr, int star, int drar, int poz){
    if(dr<star|| (star == drar && st!=dr))
        return 0;
    if(st == star && dr==drar)
        return a[poz];
    int mij=(star+drar)/2;
    int max1=0, max2=0;
    if(st<=mij)
        max1=maxim(st, min(dr,mij), star, mij, poz*2);
    if(dr>mij)
        max2=maxim(max(st,mij+1), dr, mij+1, drar, poz*2+1);
    return max(max1, max2);
}
int main()
{
    f>>n>>m;
    for(int i=1; i<=n; i++){
        f>>x;
        adaugare(1,n,i,1);
    }
    for(int i=1; i<=m; i++){
        f>>tip>>y>>x;
        if(tip ==1)
            adaugare(1,n,y,1);
        else g<<maxim(y,x,1,n,1)<<'\n';
    }
    return 0;
}