Cod sursa(job #1604131)

Utilizator dorin31Geman Dorin Andrei dorin31 Data 17 februarie 2016 23:32:24
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <fstream>

#define dim 100001

using namespace std;

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

int v[dim],sc[dim],urm[dim];
int n,len;

void teachmemasterpls()
{
    for (int k=1; k<=n; ++k) fout<<urm[k]<<" ";
    fout<<'\n';
    for (int k=1; k<=n; ++k) fout<<sc[k]<<" ";
    fout<<"\n\n";
}

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

void print(int x)
{
    if (urm[x]) print(urm[x]);
    fout<<v[x]<<" ";
}

inline int binarySearch(int x)
{
    int i,j;
    for (i=1; i<=len; ++i)
        if (v[sc[i]]>x) break;
    if (i>1) return i-1;
}

void pd()
{
    sc[1]=1;
    len=1;
    for (int i=2; i<=n; ++i)
    {
        int x=v[i];
        int poz=binarySearch(x); //fout<<poz<<'\n';
        if (poz==len) sc[++len]=i;
        else if (v[sc[poz+1]]>x) sc[poz+1]=i;
        urm[i]=sc[poz];

        //teachmemasterpls();

    }
    fout<<len<<'\n';
    print(sc[len]);
}

int main()
{
    readV();
    pd();
    return 0;
}