Cod sursa(job #3135121)

Utilizator indibotocIndi Botoc indibotoc Data 1 iunie 2023 21:43:08
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <bits/stdc++.h>

#define NMAX 100001

using namespace std;

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

int n, m, val, poz, s, f, maxim;
bool type;
int a[4*NMAX];

void update(int nod, int st, int dr, int val, int poz)
{
    if (st==dr)
    {
        a[nod]=val;
        return;
    }

    int mij=(st+dr)/2;

    if (poz<=mij)
        update(2*nod, st, mij, val, poz);
    else
        update(2*nod+1, mij+1, dr, val, poz);

    a[nod]=max(a[2*nod], a[2*nod+1]);
}

void query(int nod, int st, int dr, int s, int f)
{

    if (s<=st && dr<=f)
    {
        maxim=max(maxim, a[nod]);
        return;
    }

    int mij=(st+dr)/2;
    if (s<=mij)
        query(2*nod, st, mij, s, f);
    if (f > mij)
        query(2*nod+1, mij+1, dr, s, f);
}

int main()
{
    fin>>n>>m;
    for (int poz=1; poz<=n; poz++)
    {
        fin>>val;
        update(1, 1, n, val, poz);
    }
    for (int i=1; i<=m; i++)
    {
        fin>>type;
        if (type)
        {
            fin>>poz>>val;
            update(1, 1, n, val, poz);
        }
        else
        {
            fin>>s>>f;
            maxim=-INT_MAX;
            query(1, 1, n, s, f);
            fout << maxim << "\n";
        }
    }
    fin.close();
    fout.close();
    return 0;
}