Cod sursa(job #3294671)

Utilizator rpc1patrascoiu rares rpc1 Data 27 aprilie 2025 04:33:48
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.42 kb
#include <fstream>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int vint[100005];
int arb[400005];
int rez=0;
void build(int nd, int st, int dr)
{
    if(st==dr)
    {
        arb[nd]=vint[st];
        return;
    }
    else
    {
        int mj=(st+dr)/2;
        build(nd*2,st,mj);
        build(nd*2+1,mj+1,dr);
        arb[nd]=max(arb[nd*2],arb[nd*2+1]);
    }
}
void schimbare(int nd,int st, int dr, int tar, int val)
{
    if(st==dr)
        arb[nd]=val;
    else
    {
        int mj=(st+dr)/2;
        if(mj>=tar)
            schimbare(2*nd,st,mj,tar,val);
        else
            schimbare(2*nd+1,mj+1,dr,tar,val);
        arb[nd]=max(arb[2*nd],arb[2*nd+1]);
    }
}
void inter(int nd,int st,int dr,int sto, int dro)
{
    if(st>=sto && dr<=dro)
    {
        rez=max(rez,arb[nd]);
        return;
    }
    else
    {
        int mj=(st+dr)/2;
        if(sto<=mj)
            inter(2*nd,st,mj,sto,dro);
        if(dro>=mj+1)
        {
            inter(2*nd+1,mj+1,dr,sto,dro);
        }
    }
}
int main()
{
    int m,n,s,d,t,l,p;
    cin>>n>>m;
    for(int i=1; i<=n; i++)
        cin>>vint[i];
    build(1,1,n);
    for(int i=1; i<=n; i++)
    {
        cin>>t;
        if(t==0)
        {
            rez=0;
            cin>>s>>d;
            inter(1,1,n,s,d);
            cout<<rez<<"\n";
        }
        else
        {
            cin>>l>>p;
            schimbare(1,1,n,l,p);
        }
    }
    return 0;
}