Cod sursa(job #2695910)

Utilizator victor1306Victor Mihaila victor1306 Data 14 ianuarie 2021 20:31:34
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>

using namespace std;
fstream cin("arbint.in");
ofstream cout("arbint.out");
int n,m, poz, val, x, a, b, A, B;
int t[270000];
void actual(int p, int st, int dr){
    if(st==dr){
        t[p]=val;
        return;
    }
    int m=(st+dr)/2;
    if(poz<=m){
        actual(2*p, st, m);
    }
    else{
        actual(2*p+1, m+1, dr);
    }
    t[p]=max(t[2*p], t[2*p+1]);
}

int maxim(int p, int st, int dr){
    if(a<=st && dr<=b){
        return t[p];
    }
    int m=(st+dr)/2;
    int maxst=-1;
    int maxdr=-1;
    if(a<=m){
        maxst=maxim(2*p, st, m);
    }
    if(b>m){
        maxdr=maxim(2*p+1, m+1, dr);
    }
    return max(maxst, maxdr);
}


int main()
{

    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>x;
        val=x;
        poz=i;
        actual(1,1,n);
    }
    for(int i=1; i<=m; i++){
        cin>>x>>A>>B;
        if(x==0){
            a=A;
            b=B;
            cout<<maxim(1,1,n)<<'\n';
        }
        if(x==1){
            poz=A;
            val=B;
            actual(1,1,n);
        }
    }
    return 0;
}