Cod sursa(job #1652887)

Utilizator NightSilentIridon Stefan NightSilent Data 15 martie 2016 16:04:00
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,x,a,b,c,maxf,val,pos,u,p,maxa[500000];
void update (int nod,int l,int r)
{
    int m;
    if (l==r)
        maxa[nod]=val;
    else
    {
        m=(l+r)/2;
        if (m>=pos)
            update(2*nod,l,m);
        else
            update(2*nod+1,m+1,r);
        maxa[nod]=max(maxa[2*nod],maxa[2*nod+1]);
    }
}
void query (int nod,int l,int r)
{
    int m;
    if (p<=l && r<=u)
       {
            if (maxf<maxa[nod])
                maxf=maxa[nod];
       }

    else
    {
        m=(l+r)/2;
        if (p<=m)
            query(2*nod,l,m);
        if (m<u)
            query(2*nod+1,m+1,r);
    }


}
int main()
{
    int i,m;
    f>>n>>m;
    for (i=1;i<=n;i++)
        {
            f>>c;
            pos=i;
            val=c;
            update(1,1,n);

        }
    for (i=1;i<=m;i++)
    {
        f>>x>>a>>b;
        if (x==1)
        {
            pos=a;
            val=b;
            update(1,1,n);
        }
        else
        {
            maxf=0;
            p=a;
            u=b;
            query(1,1,n);
            g<<maxf<<'\n';
        }
    }
    g.close();
    return 0;
}