Cod sursa(job #1632451)

Utilizator StrokeSimion Valentin Stroke Data 6 martie 2016 10:02:24
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <fstream>

using namespace std;
ifstream f ("arbint.in");
ofstream g ("arbint.out");
int st,dr,ma,x,a,b,poz,val,i,j,m,n,v[400080];

void update(int nod, int st, int dr)
{
    int mijl;
    if(st==dr)
        v[nod]=val;
    else
    {
        mijl=(st+dr)>>1;
        if(poz<=mijl)
            update(2*nod,st,mijl);
        if(poz>mijl)
            update(2*nod+1,mijl+1,dr);
        v[nod]=v[2*nod];

        if(v[nod]<v[2*nod+1])
            v[nod]=v[2*nod+1];

    }
}

void query (int nod, int st, int dr)
{
    int mijl;
    if(a<=st && b>=dr)
    {
        if(v[nod]>ma)
            ma=v[nod];
    }
    else
    {
        mijl=(st+dr)>>1;
        if(a<=mijl)
            query(2*nod,st,mijl);
        if(mijl<b)
            query(2*nod+1,mijl+1,dr);
    }
}


int main()
{
    f>>n>>m;

    for(i=1;i<=n;++i)
    {
        f>>x;
        poz=i;
        val=x;
        update(1,1,n);
    }



    for(i=1;i<=m;++i)
    {
        f>>x>>a>>b;
        if(x==0)
        {
            ma=-1;
            //st=a;
           // dr=b;
            query(1,1,n);
            g<<ma<<'\n';
        }
        else
        {
            poz=a;
            val=b;
            update(1,1,n);
        }
    }
    return 0;
}