Cod sursa(job #2902498)

Utilizator adamemi02emanuel adam adamemi02 Data 16 mai 2022 15:37:31
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include<fstream>
using namespace std;
int n, m, i, x, arb[400000], a, b, maxim1;
ifstream cin("arbint.in");
ofstream cout("arbint.out");

void adaug(int nod,int st, int dr,int poz) {
    if (st == dr)
    {
        arb[nod] =x;
        return;
    }
    int mid = (st + dr) / 2;
    if (poz <= mid)
        adaug(nod*2,st, mid,poz);
    else
        adaug(nod*2+1,mid+1, dr,poz);
    arb[nod] = max(arb[2 * nod + 1], arb[2 * nod]);


}

void maxim(int nod, int st, int dr) {
    if (a <= st and b >= dr)
    {
        maxim1 = max(maxim1, arb[nod]);
        return;
    }


    int mid = (st + dr) / 2;
    if (a <= mid)
        maxim(2 * nod, st, mid);
    if (b > mid)
        maxim(2 * nod + 1, mid + 1, dr);


}

int main() {
    int y;

    cin>> n >> m;
    for (i = 1; i <= n; i++)
    {
        cin>> x;
        adaug(1, 1, n, i);
    }
    for (i = 1; i <= m; i++)
    {
        cin>> y;
        if (y == 1)
        {
            cin>> a >> x;
            adaug(1, 1, n , a);
        }
        if (y == 0)
        {
            cin>> a >> b;
            maxim1 = 0;
            maxim(1, 1, n);
            cout<< maxim1 << "\n";
        }

    }
    return 0;
}