Cod sursa(job #2940963)

Utilizator stefan2806Radulescu Stefan stefan2806 Data 16 noiembrie 2022 20:14:08
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.71 kb
#include <fstream>

using namespace std;

ifstream cin("scmax.in");
ofstream cout("scmax.out");

int l=1,i,n,st,dr,mij,v[100010],dp[100010],ant[100010];
void afis(int val)
{
    if(ant[val]!=0)
        afis(ant[val]);
    cout<<v[val]<<" ";
}
int main()
{
    cin>>n;
    for(i=1; i<=n; i++)
        cin>>v[i];
    dp[1]=1;
    for(i=2; i<=n; i++)
    {
        st=1;
        dr=l;
        while(st<=dr)
        {
            mij=(st+dr)>>1;
            if(v[i]>v[dp[mij]])
                st=mij+1;
            else
                dr=mij-1;
        }
        if(st>l)
            l++;
        dp[st]=i;
        ant[i]=dp[st-1];
    }
    cout<<l<<'\n';
    afis(dp[l]);
    return 0;
}