Cod sursa(job #2931186)

Utilizator Gabriel_DascalescuGabriel Dascalescu Gabriel_Dascalescu Data 30 octombrie 2022 17:09:24
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.42 kb
#include <fstream>
#define nmax 400005

using namespace std;

ifstream in("arbint.in");
ofstream out("arbint.out");

int arbore[nmax];

int x, caz, a, b, maxim, n, m;

void update(int nod, int poz, int start, int ending, int val)
{
    int mid;
    if(start == ending)
    {
        arbore[nod] = val;
        return;
    }
    mid = (start+ending)/2;
    if(poz <= mid)
    {
        update(2*nod,poz,start, mid, val);
    }
    else
    {
        update(2*nod + 1, poz, mid+1, ending, val);
    }
    arbore[nod] = max(arbore[2*nod], arbore[2*nod+1]);
}

int findingmax(int nod, int st, int dr, int start, int ending)
{
    int mid, ans = -1;
    if(st >= start && dr <= ending)
    {
        return arbore[nod];
    }
    mid  = (st + dr)/2;
    if(start <= mid)
    {
        ans = findingmax(2*nod, st, mid, start, ending);
    }
    if(mid < ending)
    {
        ans = max(ans,findingmax(2*nod+1, mid+1, dr, start, ending));
    }
    return ans;
}

int main()
{
    in>>n>>m;
    for(int i=1; i<=n; i++)
    {
        in>>x;
        update(1, i, 1, n , x);
    }
    /*for(int i=1; i<=9; i++)
    {
        out<<arbore[i]<<" ";
    }*/
    for(int i=1; i<=m; i++)
    {
        in>>caz>>a>>b;
        if(caz == 0)
        {
            out<<findingmax(1, 1, n, a, b)<<"\n";
        }
        else
        {
            update(1, a, 1, n, b);
        }
    }
    return 0;
}