Cod sursa(job #2444480)

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

using namespace std;

#define inf 1e9
#define maxx 100100

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

long int v[maxx],q[maxx],p[maxx];
long int n,len;

void read()
{
    fi>>n;

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

long int inser(long int k,long int l,long int r)
{
    long 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()
{
    q[1]=inf;

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

void createS()
{
    long int i=n;

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

int main()
{
    read();

    createP();

    createS();

    fo<<len<<'\n';

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

    return 0;
}