Cod sursa(job #2416389)

Utilizator stelian2000Stelian Chichirim stelian2000 Data 27 aprilie 2019 14:48:26
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <bits/stdc++.h>

using namespace std;

int v[100010],poz[100010],d[100010],tat[100010],rez[100010];

int main()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    int n,l=0,ans=0,last,c=0;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&v[i]);
        int st=1,dr=l;
        while(st<=dr)
        {
            int mid=(st+dr)/2;
            if(v[i]>v[poz[mid]]) st=mid+1;
            else dr=mid-1;
        }
        d[i]=d[poz[dr]]+1;
        tat[i]=poz[dr];
        if(d[i]>ans) {ans=d[i];last=i;}
        if(dr==l) poz[++l]=i;
        else poz[dr+1]=i;
    }
    printf("%d\n",ans);
    rez[++c]=v[last];
    while(tat[last]!=0)
    {
        last=tat[last];
        rez[++c]=v[last];
    }
    for(int i=c;i>=1;i--) printf("%d ",rez[i]);
    return 0;
}