Cod sursa(job #3231798)

Utilizator BogdanBurescuBogdan Burescu BogdanBurescu Data 27 mai 2024 19:33:18
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>

using namespace std;

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

int n,i,j,a[100005],b[100005],poz[100005],poz2[100005],k,p,st,dr,mij;

int main()
{
    cin>>n;
    for(i=1; i<=n; i++)
        cin>>a[i];
    k=1;
    b[k]=a[1];
    poz[1]=1;
    for(i=2;i<=n;i++)
        if(a[i]>=b[k])
        {
            if(a[i]>b[k])
            {
                b[++k]=a[i];
                poz[i]=k;
            }
        }
        else
        {
            st=1;
            dr=k;
            p=k+1;
            while(st<=dr)
            {
                mij=(st+dr)/2;
                if(b[mij]>=a[i])
                {
                    p=mij;
                    dr=mij-1;
                }
                else
                    st=mij+1;
            }
            b[p]=a[i];
            poz[i]=p;
        }
    j=n;
    for(i=k;i>=1;i--)
    {
        while(poz[j]!=i)
            j--;
        poz2[i]=j;
    }
    cout<<k<<'\n';
    for(i=1;i<=k;i++)
        cout<<a[poz2[i]]<<' ';
    return 0;
}