Cod sursa(job #2884177)

Utilizator Vali_nnnValentin Nimigean Vali_nnn Data 2 aprilie 2022 15:18:35
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>

using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int a[400011];
void update(int st,int dr,int val,int poz,int k)
{
    if(st==dr)
    {
        a[k]=val;
        return;
    }
    int mij=(st+dr)/2;
    if(poz<=mij)
        update(st,mij,val,poz,k*2);
    else
        update(mij+1,dr,val,poz,k*2+1);
    a[k]=max(a[k*2],a[k*2+1]);
}
int query(int st,int dr,int x,int y,int k)
{
    if(st>dr || st>y || dr<x)
        return -1;
    if(st>=x && dr<=y)
        return a[k];
    int mij=(st+dr)/2,q1,q2;
    q1=query(st,mij,x,y,k*2);
    q2=query(mij+1,dr,x,y,k*2+1);
    return max(q1,q2);
}
int n,m,i,x,y,C;
int main()
{
    f>>n>>m;
    for(i=1;i<=n;i++)
    {
        f>>x;
        update(1,n,x,i,1);
    }
    for(i=1;i<=m;i++)
    {
        f>>C>>x>>y;
        if(C==1)
            update(1,n,y,x,1);
        else
            g<<query(1,n,x,y,1)<<'\n';
    }
    return 0;
}