Cod sursa(job #2838076)

Utilizator etienAndrone Stefan etien Data 23 ianuarie 2022 01:47:05
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include<bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int INF=2e9+1;
vector<int> lis(vector<int>a)
{
    int n=a.size();
    vector<int>d(n+1,INF),p(n+1,-1),ind(n+1,-1),rec;
    d[0]=-INF;
    p[0]=-1;
    for(int i=0;i<n;i++)
    {
        int j=upper_bound(d.begin(),d.end(),a[i]) - d.begin();
        if(d[j-1]<a[i]&&a[i]<d[j])
        {
            d[j]=a[i];
            p[i]=ind[j-1];
            ind[j]=i;
        }
    }
    int ans=0;
    for(int i=0;i<=n;i++)
        if(d[i]<INF)
            ans=i;
    int i=ind[ans];
    while(i!=-1)
    {
        rec.push_back(a[i]);
        i=p[i];
    }
    sort(rec.begin(),rec.end());
    return rec;
}
vector<int>v,rez;
int main()
{
    int n,i,x;
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>x;
        v.push_back(x);
    }
    rez=lis(v);
    fout<<rez.size()<<"\n";
    for(auto q:rez)
        fout<<q<<" ";
}