Cod sursa(job #2863707)

Utilizator Undergamerrotariu dragos Undergamer Data 7 martie 2022 09:12:13
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 heap[400002];
int x,y,maxi,n,k;
void update (int nod,int beg, int en, int val,int pos)
{
    if (beg==en)
    {
        heap[nod]=val;
        return ;
    }
    else
    {
        int mij=(beg+en)/2;
        int st=2*nod;
        int dr=st+1;
        if (pos<=mij)
            update (st,beg,mij,val,pos);
        else
            update (dr,mij+1,en,val,pos);
        heap[nod]=max(heap[st],heap[dr]);
    }
    
}
void query (int nod, int beg, int en)
{
    if (x<=beg && y>=en)
    {
        maxi=max(maxi,heap[nod]);
    }
    else
    {
        int mij=(beg+en)/2;
        int st=2*nod;
        int dr=st+1;
        if (x<=mij)
            query (st,beg,mij);
        if (y>mij)
            query (dr,mij+1,en);
    }
}
int main()
{
    cin>>n>>k;
    for (int i=1;i<=n;i++)
    {
        int val;
        cin>>val;
        update (1,1,n,val,i);
    }
    for (int i=1;i<=k;i++)
    {
        bool c;
        cin>>c>>x>>y;
        maxi=0;
        if (c==1)
        {
            update (1,1,n,y,x);
        }
        else
        {
            query(1,1,n);
            cout<<maxi<<'\n';
        }
    }
}