Cod sursa(job #2497862)

Utilizator SoranaAureliaCatrina Sorana SoranaAurelia Data 23 noiembrie 2019 11:36:31
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 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=maxim(st, mij, star, mij, poz*2);
    int max2=maxim(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;
}