Cod sursa(job #2252144)

Utilizator Vlad_FuioreaVlad - Stefan Fuiorea Vlad_Fuiorea Data 2 octombrie 2018 13:18:24
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int n,i,j,v[100001],a[100001],tata[100001],l[100001],S[100001],sol,k,K,poz;
int binara(int x,int k)
{
    int st=1; int dr=k; int sol=0;
    while(st<=dr)
    {
        int mid=(st+dr)/2;
        if(v[a[mid]]>=v[x])
        {
            sol=mid;
            dr=mid-1;
        }
        else
        {
            st=mid+1;
        }
    }
    if(sol==0)
        return k+1;
    return sol;
}
int main()
{
    cin>>n;
    for(i=1;i<=n;i++)
        cin>>v[i];
    k=0;
    for(i=1;i<=n;i++)
    {
        sol=binara(i,k);
        k=max(k,sol);
        a[sol]=i;
        l[i]=sol;
        tata[i]=a[sol-1];
    }
    cout<<k<<"\n";
    K=k;
    for(i=1;i<=n;i++)
    {
        if(l[i]==k)
        {
            poz=i;
            break;
        }
    }
    while(k!=0)
    {
        S[k]=v[poz];
        poz=tata[poz];
        k--;
    }
    for(i=1;i<=K;i++)
        cout<<S[i]<<" ";
    return 0;
}