Cod sursa(job #2170780)

Utilizator alisavaAlin Sava alisava Data 15 martie 2018 09:43:59
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("scmax.in");
ofstream fout("scmax.out");

int n,a[100005],v[100005],s[100005],sol[100005];
int top;
void CautBinar(int x)
{
    int sol,st,fn,mij;
    st=1;
    fn=top;
    while(st<=fn)
    {
        mij=(st+fn)/2;
        if(a[x]<=a[v[mij]])
        {
            sol=mij;
            fn=mij-1;
        }
        else st=mij+1;
    }
    s[x]=sol;
    v[sol]=x;
}


int main()
{
    int cnt;
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>a[i];
    for(int i=1;i<=n;i++)
    {
        if(a[v[top]]<a[i])
        {
            v[++top]=i;
            s[i]=top;
        }
        else CautBinar(i);
    }
    cnt=top;
    for(int i=n;i>=1;i--)
    {
        if(s[i]==cnt)
        {
            sol[cnt]=a[i];
            cnt--;
        }
    }
    fout<<top<<"\n";
    for(int i=1;i<=top;i++)
        fout<<sol[i]<<" ";


    return 0;
}