Cod sursa(job #2972960)

Utilizator Alex_DiaconuDiaconu Alexandru Alex_Diaconu Data 30 ianuarie 2023 18:20:53
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>

using namespace std;

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

const int N=400005;
int arb[N], a, b;

void update (int poz, int val)
{
    arb[poz]=val;
    while (poz>1)
    {
        poz/=2;
        arb[poz]=max(arb[poz*2], arb[poz*2+1]);
    }
}

int cuerry (int s, int d, int ind)
{
    if (s>=a && d<=b)
    {
        return arb[ind];
    }
    int x1=0, x2=0;
    if ((d+s)/2>=a)
    {
        x1=cuerry(s, (d+s)/2, ind*2);
    }
    if ((d+s)/2+1<=b)
    {
        x2=cuerry((d+s)/2+1, d, ind*2+1);
    }
    return max(x1, x2);
}

int main()
{
    int n, m, x, newn=1, p;
    cin >> n >> m;
    while (newn<n)
    {
        newn*=2;
    }
    /*for (int i=newn+n; i<newn*2; i++)
    {
        arb[i]=-1;
    }*/
    for (int i=1; i<=n; i++)
    {
        cin >> p;
        ///update(newn+i-1, p);
        arb[newn+i-1]=p;
    }
    for (int i=newn-1; i>=1; i--)
    {
        arb[i]=max(arb[i*2], arb[i*2+1]);
    }
    for (int i=1; i<=m; i++)
    {
        cin >> x >> a >> b;
        if (x==1)
        {
            update(newn+a-1, b);
        }
        else
        {
            cout << cuerry(1, newn, 1) << "\n";
        }
    }
    return 0;
}