Cod sursa(job #2843901)

Utilizator GeutzzuBorozan George Geutzzu Data 3 februarie 2022 10:57:21
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>




using namespace std;

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

int n,m;
int v[1 << 18];

void update(int i, int x, int node=1, int st=1, int dr=n)
{
    if(st==dr)
    {
        v[node]=x;
        return;
    }
    int m=(st+dr)/2;
    if(i<=m)
    {
        update(i, x, 2*node, st, m);
    }
    else
    {
        update(i, x, 2*node+1, m+1,dr);
    }
    v[node]=max(v[2*node],v[2*node+1]);
}

int query(int is, int ir, int node=1, int st=1, int dr=n)
{
    if(is<=st && dr<=ir)
    {
        return v[node];
    }
    int stres=-1;
    int drres=-1;
    int m=(st+dr)/2;
    if(is<=m)
    {
        stres=query(is, ir, 2*node, st, m);
    }
    if(ir>m)
    {
        drres=query(is, ir, 2*node+1, m+1, dr);
    }
    return max(stres, drres);
}



int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        int x;
        cin>>x;
        update(i, x);

    }
    while(m--)
    {
        int a,b,c;
        cin>>a>>b>>c;
        if(a==0)
        {
            cout<<query(b,c)<<'\n';
        }
        else
        {
            update(b,c);
        }
    }
    return 0;
}