Cod sursa(job #3215770)

Utilizator eugenioMarinescu Eugenio eugenio Data 15 martie 2024 12:39:20
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#include <algorithm>
#include <vector>
#define nmax 100005
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");

int n, k, best;
int poz[nmax], mx[nmax], v[nmax];
vector<int> sol;

int cb(int val, int st, int dr)
{
    int ans=0;
    while(st<=dr)
    {
        int mid=(st+dr)/2;
        if(v[poz[mid]]<val)
        {
            ans=mid;
            st=mid+1;
        }
        else
            dr=mid-1;
    }
    return ans;
}


int main()
{
    cin>>n;
    for(int i=1; i<=n; i++)
        cin>>v[i];

    for(int i=1; i<=n; i++)
    {
        int p=cb(v[i],0,best);
        poz[p+1]=i;
        mx[i]=p+1;
        best=max(best,p+1);
    }
    cout<<best<<'\n';
    for(int i=n; i>=1; i--)
    {
        if(mx[i]==best)
        {
            sol.push_back(i);
            best--;
        }
    }
    reverse(sol.begin(),sol.end());
    for(auto i : sol)
        cout<<v[i]<<' ';
    return 0;
}