Cod sursa(job #1686080)

Utilizator oldatlantianSerban Cercelescu oldatlantian Data 12 aprilie 2016 01:31:34
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <algorithm>
#include <cstdio>
#include <vector>
using namespace std;

vector<int> q,v,l,ans;

int main(void){
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    int n,t;
    vector<int>::iterator it;

    scanf("%d",&n);
    for(int i=0; i<n; ++i){
        scanf("%d",&t);
        it=lower_bound(q.begin(), q.end(), t);
        if(it==q.end()){
            q.push_back(t);
            l.push_back(q.size());
        }
        else{
            *it=t;
            l.push_back(it-q.begin()+1);
        }
        v.push_back(t);
    }
    printf("%d\n",q.size());
    for(int t=q.size(), i=l.size()-1; t; --i){
        if(l[i]==t){
            ans.push_back(v[i]);
            --t;
        }
    }
    for(int i=ans.size()-1; i>=0; --i)
        printf("%d ",ans[i]);
    return 0;
}