Cod sursa(job #2944261)

Utilizator raileanu-alin-gabrielRaileanu Alin-Gabriel raileanu-alin-gabriel Data 22 noiembrie 2022 11:33:40
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>
const int VMAX=1e5+5;

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

void update(int, int, int);
void query(int, int, int);
int arbint[4*VMAX];
int n, q, nrupd, poz, stq, drq, maxim;

int main()
{
    int i, tip, a, b;
    fin>>n>>q;
    for(i=1; i<=n; i++)
    {
        fin>>nrupd;
        poz=i;
        update(1, 1, n);
    }
    for(i=1; i<=q; i++)
    {
        fin>>tip>>a>>b;
        if(tip==1)
        {
            poz=a;
            nrupd=b;
            update(1, 1, n);
        }
        else
        {
            stq=a;
            drq=b;
            maxim=0;
            query(1, 1, n);
            fout<<maxim<<'\n';
        }
    }
    return 0;
}

void update(int nod, int st, int dr)
{
    if(st==dr)
    {
        arbint[nod]=nrupd;
        return;
    }
    int mij=(st+dr)/2;
    if(poz<=mij) update(2*nod, st, mij);
    else update(2*nod+1, mij+1, dr);
    arbint[nod]=max(arbint[2*nod], arbint[2*nod+1]);
}

void query(int nod, int st, int dr)
{
    if(st>=stq && dr<=drq)
    {
        maxim=max(maxim, arbint[nod]);
        return;
    }
    if(st==dr) return;
    int mij=(st+dr)/2;
    if(stq<=mij) query(2*nod, st, mij);
    else if(mij<stq) query(2*nod+1, mij+1, dr);
}