Cod sursa(job #2838255)

Utilizator loraclorac lorac lorac Data 23 ianuarie 2022 12:01:11
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
const int lim=1e5+4;
pair<int,int> dp[lim];
vector<int> ans;
int last[lim];
int v[lim];
int lmax;
int unde;
int n;
int main()
{
    in>>n;
    for(int i=1;i<=n;++i)
    {
        in>>v[i];
        int l=0,r=lmax,med;
        while(l<r)
        {
            if(r==l+1)
                med=r;
            else med=(l+r)>>1;
            if(v[i]>dp[med].first)
                l=med;
            else r=med-1;
        }
        if(l==lmax)
            ++lmax,
            unde=i;
        dp[l+1]={v[i],i};
        last[i]=dp[l].second;
    }
    out<<lmax<<'\n';
    for(int i=lmax;i>=1;--i)
    {
        ans.push_back(v[unde]);
        unde=last[unde];
    }
    for(int i=ans.size()-1;i>=0;--i)
        out<<ans[i]<<' ';
    out<<'\n';
    return 0;
}