Cod sursa(job #2754590)

Utilizator SofeiAndreiSofei Andrei SofeiAndrei Data 26 mai 2021 01:17:20
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m,a,b,x,Max;
int arbore[500001];
bool cerinta;
void Update(int poz_in_arbore, int st, int dr, int i,int Val){
    if(st==dr){
        arbore[poz_in_arbore]=Val;
    }
    else{
        int m=(st+dr)/2;
        if(i>m){
            Update(poz_in_arbore*2+1,m+1,dr,i,Val);
        }
        else
        Update(poz_in_arbore*2,st,m,i,Val);
        arbore[poz_in_arbore]=max(arbore[poz_in_arbore*2],arbore[poz_in_arbore*2+1]);
    }
}
void Maxim(int poz_in_arbore, int st, int dr, int a,int b){
    if(a<=st && dr<=b){
        Max=max(Max,arbore[poz_in_arbore]);
        return ;
    }
    int m=(st+dr)/2;
    if(a<=m){
        Maxim(poz_in_arbore*2,st,m,a,b);
    }
    if(m<b){
        Maxim(poz_in_arbore*2+1,m+1,dr,a,b);
    }
}
int main ()
{
    f>>n>>m;
    for(int i=1;i<=n;i++){
        f>>x;
        Update(1,1,n,i,x);
    }
    for(int i=1;i<=m;i++){
        f>>cerinta>>a>>b;
        if(cerinta==0){
            Max=0;
            Maxim(1,1,n,a,b);
            g<<Max<<'\n';
        }
        else{
            Update(1,1,n,a,b);
        }
    }
    return 0;
}