Cod sursa(job #955692)

Utilizator Dddarius95Darius-Florentin Neatu Dddarius95 Data 1 iunie 2013 12:43:18
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
//subsir crescator maximal
#include <fstream>
#define Nmax 100010
#define MAX 2000000009
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");

int n,L,PozMax,v[Nmax],l[Nmax],Min[Nmax],d[Nmax],p[Nmax];

void init()
{
    f>>n;
    for(int i=1;i<=n;i++)f>>v[i];
}

void SCMAX()
{

    for(int i=1;i<=n;i++)
    {
        Min[i]=MAX;
        l[i]=L;
        while (Min[l[i]]>=v[i] && l[i]>0) l[i]--;
        d[i]=p[l[i]];
        l[i]++;
        if(l[i]>L)
        {
            L=l[i]; PozMax=i;
        }
        if(v[i]<Min[l[i]])
        {
            Min[l[i]]=v[i]; p[l[i]]=i;
        }
    }
 }

void afisare(int x)
{
    if (x!=0)
    {
        afisare(d[x]);
        g<<v[x]<<" ";
    }
}


int main()
{
    init();
    SCMAX();
    g<<L<<'\n';
    afisare(PozMax);
    g<<'\n';
    f.close();g.close();
    return 0;
}