Cod sursa(job #1648870)

Utilizator cristinelulCristian Virga cristinelul Data 11 martie 2016 11:55:07
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>

using namespace std;

ifstream fin("arbint.in");
ofstream fout("arbint.out");

int n,m,i,x,y,v[263000],maxim;
void update(int s,int d,int nod)
{
    int mij;
    if(s==d)
        v[nod]=x;
    else
    {
        mij=(s+d)/2;
        if(i<=mij)
            update(s,mij,2*nod);
        else
            update(mij+1,d,2*nod+1);
        v[nod]=max(v[2*nod],v[2*nod+1]);
    }
}
void aflare(int s,int d,int nod)
{
    int mij;
    mij=(s+d)/2;
    if(s>=y && d<=x)
        maxim=max(maxim,v[nod]);
    else
    {
        if(mij>=y)
            aflare(s,mij,2*nod);
        if(mij<x)
            aflare(mij+1,d,2*nod+1);
    }
}
void citire()
{
    int j,op;
    fin>>n>>m;
    for(i=1;i<=n;i++)
    {
        fin>>x;
        update(1,n,1);
    }
    for(j=1;j<=m;j++)
    {
        maxim=0;
        fin>>op>>y>>x;
        if(op==0)
        {
            aflare(1,n,1);
            fout<<maxim<<'\n';
        }
        else
        {
            i=y;
            update(1,n,1);
        }
    }
}
int main()
{
    citire();
    fout.close();
    return 0;
}