Cod sursa(job #2444471)

Utilizator Adrian_Popescu311Popescu Adrian Adrian_Popescu311 Data 31 iulie 2019 16:23:40
Problema Subsir crescator maximal Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <iostream>
#include <fstream>
#include <assert.h>

using namespace std;

#define inf 30000

ifstream fi("scmax.in");
ofstream fo("scmax.out");

int v[25],q[25],p[25];
int n,len;

void read()
{
    fi>>n;

    for(int i=1;i<=n;i++)
        fi>>v[i];
}

int inser(int k,int l,int r)
{
    int mid=(l+r)/2;

    if(l==r)
    {
        q[l]=k;

        if(r>len)
            q[++len+1]=inf;

        return l;
    }

    if(k<=q[mid])
        return inser(k,l,mid);
    else
        return inser(k,mid+1,r);

}

void createP()
{
    p[1]=1;

    q[1]=q[2]=inf;

    for(int i=2;i<=n;i++)
        p[i]=inser(v[i],1,len+1);
}

void createS()
{
    int i=n;

    for(int k=len;k>=1;k--)
        {while(k!=p[i])
            i--;
        q[k]=v[i];}
}

int main()
{
    read();

    createP();

    createS();

    fo<<len<<'\n';

    for(int i=1;i<=len;i++)
        fo<<q[i]<<" ";

    return 0;
}