Cod sursa(job #3183323)

Utilizator lucar1990Rosu Luca Gabriel Stefan lucar1990 Data 11 decembrie 2023 15:13:36
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.37 kb
#include <bits/stdc++.h>
#define r return
using namespace std;
int n,m,aint[400001];
int fs(int nod)
{
    return 2*nod;
}
int fd(int nod)
{
    return 2*nod + 1;
}
void up(int nod,int st, int dr, int poz, int x)
{
    if(st == dr) {
        aint[nod] = x;
        r ;
    }
    int mij = (st + dr) / 2;
    if(poz <= mij)
    {
        up(fs(nod), st, mij, poz, x);
    }
    else up(fd(nod), mij + 1, dr, poz, x);
    aint[nod] = max(aint[fs(nod)],aint[fd(nod)]);
}
int query(int nod, int st, int dr, int qst, int qdr)
{
    if(qst <= st && dr <= qdr)
    {
        r aint[nod];
    }
    if( dr < qst || qdr < st)
    {
        r  INT_MIN;
    }
    int mij = ( st + dr ) / 2;
    r max(query(fs(nod),st,mij,qst,qdr), query(fd(nod), mij + 1, dr, qst,qdr));
}
void cit()
{
    cin >> n >> m;
    for(int i = 1; i <= n; i++)
        {
            int pulea;
            cin >> pulea;
            up(1,1,n,i,pulea);
        }
}
void rez(){
    for(int i = 1; i <= m; i++)
    {
        int intrb,a,b;
        cin >> intrb;
        cin >> a >> b;
        if(intrb == 1)
        {

            up( 1, 1, n, a, b);
            continue ;
        }
        cout << query( 1, 1, n, a, b) << '\n';
    }
}

int main()
{
    freopen("arbint.in","r",stdin);
    freopen("arbint.out","w",stdout);
    cit();
    rez();
    return 0;
}