Cod sursa(job #1268648)

Utilizator HotSteelBeteag Ion Andrei HotSteel Data 21 noiembrie 2014 11:06:18
Problema Subsir crescator maximal Scor 95
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <cstdio>
#include <set>
#include <map>
#include <stack>
#include <algorithm>

using namespace std;

#define INF ((1 << 31) - 1)

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

    int N;
    scanf("%d", &N);

    multiset < int > A;
    multiset < int > :: iterator it;
    map < int , int > P;
    int i;
    int X;
    for(i = 1 ; i <= N ; ++i)
    {
        scanf("%d", &X);
        A.insert(X);
        it = A.lower_bound(X);

        if(it == A.begin())
        {
            P[X] = -1;
        }
        else
        {
            --it;
            P[X] = *it;
            ++it;
        }

        if(++it != A.end())
            A.erase(it);
    }

    printf("%d\n", A.size());

    stack < int > S;

    X = *A.rbegin();
    while(X >= 0)
    {
        S.push(X);
        X = P[X];
    }

    while(!S.empty())
    {
        printf("%d ", S.top());
        S.pop();
    }

    return 0;
}