Cod sursa(job #583759)

Utilizator stef93Stefan Gilca stef93 Data 22 aprilie 2011 15:44:05
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>
using namespace std;
int ARB[100006*2];
int n,m,mx,P,A,B,C;

void update(int l,int r,int nod)
{
    if(l==r)
    {
        ARB[nod]=C;
        return;
    }
    int k=(l+r)/2;
    if(P<=k) update(l,k,2*nod);
    else update(k+1,r,2*nod+1);
    ARB[nod]=max(ARB[2*nod],ARB[2*nod+1]);
}

void querry(int l,int r,int nod)
{
    if(A<=l&&B>=r)
    {
        if(mx<ARB[nod])mx=ARB[nod];
        return ;
    }
    int k=(l+r)/2;
    if(A<=k) querry(l,k,2*nod);
    if(k<B) querry(k+1,r,2*nod+1);
}

int main()
{
    int i,x,y,op;
    ifstream in("arbint.in");
    ofstream out("arbint.out");
    in>>n>>m;
    for(i=1;i<=n;i++)
    {
        in>>x;
        P=i;C=x;
        update(1,n,1);
    }
    for(i=0;i<m;i++)
    {
        in>>op>>x>>y;
        if(op==1)
        {
        P=x,C=y;
        update(1,n,1);
        }
        else
        if(op==0)
         {
            mx=-1;
            A=x,B=y;
            querry(1,n,1);
            out<<mx<<'\n';
        }
    }
    in.close(),out.close();
    return 0;
}