Cod sursa(job #1360813)

Utilizator Darius15Darius Pop Darius15 Data 25 februarie 2015 18:03:23
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>

using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int a[250001],x,b,t,y,MAX,n,m,i,val,poz;
void Build(int nod,int st,int dr)
{
    int m;
    if (st==dr) a[nod]=val;
    else
    {
        m=(st+dr)/2;
        if (poz<=m) Build(2*nod,st,m);
        else Build(2*nod+1,m+1,dr);
       a[nod]=max(a[2*nod],a[2*nod+1]);
    }
}
void Query(int nod,int st,int dr)
{
    int m;
    if (x<=st && dr<=y)
     MAX=max(MAX,a[nod]);
    else
    {
        m=(st+dr)/2;
        if (x<=m) Query(2*nod,st,m);
        if (y>m) Query(2*nod+1,m+1,dr);
    }

}
int main()
{
    f>>n>>m;
    for (i=1;i<=n;i++)
    f>>b,val=b,poz=i,Build(1,1,n);
    for (i=1;i<=m;i++)
    {
        MAX=-100001;
        f>>t>>x>>y;
        if (t==0)
        Query(1,1,n),g<<MAX<<'\n';
        else
           val=y,poz=x,Build(1,1,n);
    }
    return 0;
}