Cod sursa(job #2620712)

Utilizator MerlinTheWizardMelvin Abibula MerlinTheWizard Data 29 mai 2020 15:43:11
Problema Arbori de intervale Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
long aint[100001];
int n,m,a,b;
int c;
void update(int in,int sf,int p,int poz)
{
    if(in == sf)
    {
        aint[poz] = b;
        return;
    }
    int mij = (in + sf) / 2;
    if(p <= mij)
    {
        update(in,mij,p,poz*2);
    }
    else
        update(mij + 1,sf,p,poz*2 + 1);
    aint[poz] = max(aint[poz * 2],aint[poz*2+1]);
}
int cautare(int in,int sf,int st,int dr,int poz)
{
    if(in == st && dr == sf)
    {
        return aint[poz];
    }
    int mij = (in + sf) / 2;
    if(dr <= mij)
        return cautare(in,mij,st,dr,poz*2);
    else if(st > mij)
        return cautare(mij+1,sf,st,dr,poz*2+1);
    else
        return max(cautare(in,mij,st,mij,poz*2),cautare(mij+1,sf,mij+1,dr,poz*2+1));
}

int main()
{
    f>>n>>m;
    for(int i = 1; i <= n; ++i)
    {
        f >> b;
        update(1,n,i,1);
    }
    for(int i=1;i<=m;i++)
    {
        f>>c;
        int x=0,y=0;
        f>>x>>b;
        if(c==0)
        {
            g<<cautare(1,n,x,b,1)<<"\n";
        }
        else
        {
            update(1,n,x,1);
        }
    }

}