Cod sursa(job #2416329)

Utilizator alex2kamebossPuscasu Alexandru alex2kameboss Data 27 aprilie 2019 13:29:30
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>

#define N 100005

using namespace std;

int n, a[N], e[N];
vector <int> v;
int sol[N];

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

    v.push_back(0);
    scanf("%d", &n);
    for(int i = 1; i <= n; ++i){
        scanf("%d", &a[i]);
        if(a[i]>v.back()){
            v.push_back(a[i]);
            e[i] = v.size()-1;
        }else{
            int poz = lower_bound(v.begin()+1,v.end(),a[i]) - v.begin();
            v[poz] = a[i];
            e[i] = poz;
        }
    }

    int l = n;
    int len = v.size()-1;
    printf("%d\n", len);
    for(int i = len; i > 0; --i){
        for(int j = l; j > 0; --j)
            if(e[j] == i){
                l = j;
                sol[i] = a[j];
                break;
            }
    }

    for(int i = 1; i <= len; ++i)
        cout<<sol[i]<<" ";

    return 0;
}