Cod sursa(job #3274747)

Utilizator dragos_poputepopute dragos mihai dragos_popute Data 8 februarie 2025 10:46:11
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
const int NMax=1000;
int v[100005];
int ar[400005];
int n;
int m;
int sol;
int a,b,op;
void num(int st,int dr,int i)
{
    if(st==dr)
        ar[i]=v[st];
        else
    {
        num(st,(st+dr)/2,2*i);
        num((st+dr)/2+1,dr,2*i+1);
        ar[i]=max(ar[2*i],ar[2*i+1]);
    }

}
void update(int st,int dr,int i)
{
    if(st==dr)
        ar[i]=b;
    else
    {
        int mid=(st+dr)/2;
        if(a<=mid)
        {
            update(st,mid,2*i);

        }
        else
            update(mid+1,dr,2*i+1);
        ar[i]=max(ar[2*i],ar[2*i+1]);
    }
}
void maxim(int st,int dr,int i)
{
    if(a<=st && dr<=b)
        {sol=max(sol,ar[i]);return;}
    if(dr<a || st>b)
        return;
    maxim(st,(st+dr)/2,2*i);
    maxim((st+dr)/2+1,dr,2*i+1);
}
void solve()
{
    while(m--)
    {
        fin>>op>>a>>b;
        sol=0;
        if(op==0)
            {
                maxim(1,n,1);
                fout<<sol<<endl;

            }
        if(op==1)
            {
                v[a]=b;
                update(1,n,1);
            }

    }
}
int main()
{

    fin>>n>>m;
    for(int i=1;i<=n;i++)
        fin>>v[i];
    num(1,n,1);
    solve();
    return 0;
}