Cod sursa(job #914906)

Utilizator Bogdan13Bogdan Stoian Bogdan13 Data 14 martie 2013 16:14:16
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include<fstream>
#define dim 100002
#define INF 1999999999
using namespace std;

ifstream f("arbint.in");
ofstream g("arbint.out");

long N,M,arb[4*dim+100],poz,val,X,a,b,afis;
int t;

void upd(long nod, long st, long dr)
{
    if (st==dr)
       arb[nod]=val;
    else{
            long mij=(st+dr)/2;
            if( poz<=mij ) upd (2*nod,st,mij);
            if (poz>mij) upd(2*nod+1,mij+1,dr);

            arb[nod]=max(arb[2*nod],arb[2*nod+1]);
        }
}

void query(long nod , long st , long dr)
{
    if (a<=st&&b>=dr)
       {if (arb[nod]>afis) afis=arb[nod];}
    else
    {
        long mij=(st+dr)/2;
        if (a<=mij) query (2*nod,st,mij);
        if (b>mij) query(2*nod+1,mij+1,dr);

    }

}

int main()
{
    f>>N>>M;

    for (int i=1;i<=N;i++)
    {
        f>>X;
        poz=i; val=X;
        upd (1,1,N);
    }

    for (int i=1;i<=M;i++)
    {
        f>>t>>a>>b;
        if (t==1)
          {poz=a; val=b; upd(1,1,N);}
        if (t==0)
           {   afis=-INF;
               query(1,1,N);
               g<<afis<<'\n';}


    }
return 0;
}