Cod sursa(job #1167340)

Utilizator mirceadinoMircea Popoveniuc mirceadino Data 4 aprilie 2014 20:02:01
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include<cstdio>
#include<algorithm>

using namespace std;

const int NMAX = 100000+5;
const int INF = (1LL<<31)-1;

void Read(),Solve(),Print();

int N,start,last;
int V[NMAX];
int T[NMAX];
int P[NMAX];
int Best[NMAX];
int Solution[NMAX];

int main()
{
    Read();
    Solve();
    Print();

    return 0;
}

void Read()
{
    int i;

    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);

    scanf("%d",&N);

    for(i = 1; i <= N; i++)
        scanf("%d",&V[i]);
}

void Solve()
{
    int i,j;

    for(i = 1; i <= N; i++)
    {
        T[i] = INF;
        j = lower_bound(T+1, T+i+1, V[i]) - T;
        T[j] = V[i];
        P[i] = j;
        Best[i] = max(Best[i-1],j);
    }

    for(i = Best[N], j = N; i && j; j--)
        if(P[j] == i)
        {
            Solution[i] = V[j];
            i--;
        }
}

void Print()
{
    int i;

    printf("%d\n",Best[N]);

    for(i = 1; i <= Best[N]; i++)
        printf("%d ",Solution[i]);
}