Cod sursa(job #2753724)

Utilizator andreea.ioanaSora Andreea-Ioana andreea.ioana Data 24 mai 2021 10:14:54
Problema Arbori de intervale Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <fstream>
using namespace std;
const int n=100000;
int N,M,arb[3*n],i,x,operatie,index,valoare;
void update(int nod, int st, int dr, int Index, int valoare)
{
    if (st==dr)
    {
        arb[nod]=valoare;
        return;
    }
    int mijloc=(st+dr)/2;
    if (Index<=mijloc) update(2*nod,st,mijloc,Index,valoare);
    else update(2*nod+1,mijloc+1,dr,Index,valoare);
    arb[nod]=max(arb[2*nod],arb[2*nod+1]);
}
int maxim(int nod, int st, int dr, int L, int R)
{
    if (L<=st && dr<=R) return arb[nod];
    int mijloc=(st+dr)/2;
    int stanga=0, dreapta=0;
    if (L<=mijloc) stanga=maxim(2*nod,st,mijloc,L,R);
    if (R>mijloc) dreapta=maxim(2*nod+1,mijloc+1,dr,L,R);
    return max(stanga,dreapta);
}
int main()
{   ifstream f("arbint.in");
    ofstream g("arbint.out");
    f>>N>>M;
    for (i=1;i<=N;i++)
    {
        f>>x;
        update(1,1,n,i,x);
    }
    for (i=1;i<=M;i++)
    {
        f>>operatie>>index>>valoare;
        if (operatie==0) g<<maxim(1,1,n,index,valoare)<<endl;
        else if (operatie==1) update(1,1,n,index,valoare);
    }
    f.close();
    g.close();
    return 0;
}