Cod sursa(job #1969854)

Utilizator raduzxstefanescu radu raduzx Data 18 aprilie 2017 18:00:31
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>

using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
#define nmax 100010
int maxim,x,ind,v[4*nmax],a,b;
void adaug(int inc,int fi,int poz)
{
    if(inc==fi)
        v[poz]=x;
    else
    {
        int mij=(inc+fi)/2;
        if(mij>=ind)
            adaug(inc,mij,poz*2);
        else
            adaug(mij+1,fi,poz*2+1);
        v[poz]=max(v[poz*2],v[poz*2+1]);
    }
}
void ask(int inc,int fi,int poz)
{
    if(a<=inc and fi<=b)
    {if(maxim<v[poz])
        maxim=v[poz];}
    else
    {
        int mij=(inc+fi)/2;
        if(a<=mij)
            ask(inc,mij,poz*2);
        if(b>mij)
            ask(mij+1,fi,poz*2+1);
    }
}
int main()
{
    int i,n,m,tip;
    f>>n>>m;
    for(i=1;i<=n;i++)
    {
        ind=i;
        f>>x;
        adaug(1,n,1);
    }
    for(i=1;i<=m;i++)
    {
        f>>tip>>a>>b;
        if(tip==1)
        {
            ind=a;
            x=b;
            adaug(1,n,1);
        }
        else
        {
            maxim=0;
            ask(1,n,1);
            g<<maxim<<'\n';
        }
    }
    return 0;
}