Cod sursa(job #1640744)

Utilizator DobosDobos Paul Dobos Data 8 martie 2016 19:07:29
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int NMAX = 100005;
const int INF = 1e11;
vector < int > Sol;
int V[NMAX],Q[NMAX],P[NMAX],L,n;
inline int Insert(int x,int Lo,int Hi){
    int Mid;
    while(Lo <= Hi){
        if(Lo == Hi){
            if(Lo > L){
                Q[++L + 1] = INF;
            }
            Q[Lo] = x;
            return Lo;
        }
        Mid = (Hi + Lo)/2;
        if(Q[Mid] < x)
            Lo = Mid + 1;
        else
            Hi = Mid;
    }

}

int main()
{
    fin >> n;
    for(int i = 1; i <= n; i++)
        fin >> V[i];
    L = 0; Q[1] = INF;
    for(int i = 1; i <= n; i++){
        P[i] = Insert(V[i],1,L + 1);
    }
    for(int i = L; i > 0; i--){
        while(P[n] != i) n--;
        Sol.push_back(V[n]);
    }
    fout << L << "\n";
    for(int i = Sol.size() - 1;i >= 0;i--)
        fout << Sol[i] << " ";
    return 0;
}