Cod sursa(job #2754817)

Utilizator petru.burdusaBurdusa Petru petru.burdusa Data 26 mai 2021 16:14:49
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");

int n,m,v[400005],c,a,b;

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

int maxim(int st, int dr, int sta, int dra, int poz){
    if(dr<sta || (sta == dra && st!= dr)) {
        //cout<<"max 0";
        return 0;
    }
    if(st == sta && dr == dra)
        return v[poz];
    int mij = (sta+dra)/2;
    int max1=0,max2=0;
    if(st<=mij)
        max1=maxim(st, min(dr,mij), sta, mij, poz*2);
    if(dr>mij)
        max2=maxim(max(st,mij+1), dr, mij+1, dra, poz*2+1);
    return max(max1, max2);
}

int main() {
    in>>n>>m;
    for(int i=1;i<=n;++i)
    {
        in>>a;
        add(1,n,i,1);
    }
    for(int i=1;i<=m;++i)
    {
        in>>c>>a>>b;
        if(c==1)
            add(1,n,a,1);
        else
            out<<maxim(a,b,1,n,1)<<'\n';
    }
}