Cod sursa(job #3284380)

Utilizator nistor_dora_valentinaNistor Dora Valentina nistor_dora_valentina Data 11 martie 2025 15:37:06
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <fstream>

using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n, m, i, j, x[100005], a[400005], ans, t, a1, b;
void build(int nod, int st, int dr)
{
    if(st==dr)
        a[nod]=x[st];
    else
    {
        int mij=(st+dr)/2;
        build(2*nod, st, mij);
        build(2*nod+1, mij+1, dr);
        a[nod]=max(a[2*nod], a[2*nod+1]);
    }
}
void update(int nod, int st, int dr, int poz, int val)
{
    if(st==dr)
        a[nod]=val;
    else
    {
        int mij=(st+dr)/2;
        if(poz<=mij)
          update(2*nod, st, mij, poz, val);
        if(poz>mij)
          update(2*nod+1, mij+1, dr, poz, val);
        a[nod]=max(a[2*nod], a[2*nod+1]);
    }
}
void query(int nod, int st, int dr, int l, int r)
{
    if(l<=st && dr<=r)
        ans=max(ans, a[nod]);
    else
    {
        int mij=(st+dr)/2;
        if(l<=mij)
            query(2*nod, st, mij, l, r);
        if(r>mij)
            query(2*nod+1, mij+1, dr, l, r);
    }
}
int main()
{
    fin>>n>>m;
    for(i=1; i<=n; i++)
        fin>>x[i];
    build(1, 1, n);
    for(i=1; i<=m; i++)
    {
        fin>>t>>a1>>b;
        if(t==0)
        {
            ans=0;
            query(1, 1, n, a1, b);
            fout<<ans<<'\n';
        }
        else
           update(1, 1, n, a1, b);
    }
    return 0;
}