Cod sursa(job #2499925)

Utilizator hunting_dogIrimia Alex hunting_dog Data 26 noiembrie 2019 22:57:47
Problema Subsir crescator maximal Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <iostream>
#include <fstream>

#define NMAX 100000

using namespace std;

ifstream f("scmax.in");
ofstream g("scmax.out");

int findPos(int *v,int *lis,int l,int r,int x)
{
    while(r-l>1)
    {
        int m=l+(r-l)/2;
        if(v[lis[m]]>=x)
            r=m;
        else
            l=m;

    }
    return l+1;

}

int main()
{
    int n,v[NMAX],lis[NMAX]={0},p[NMAX],m=0;
    f>>n;
    for(int i=0;i<n;++i)
        f>>v[i],p[i]=-1;

    lis[0]=0;
    p[0]=0;

    for(int i=1;i<n;++i)
    {
        if(v[i]>v[lis[m]])
            lis[++m]=i,p[i]=i;
        else if(v[i]!=v[lis[0]])
            if(v[i]<v[lis[0]])
                p[i]=lis[0],lis[0]=i;
            else
            {
                int k=findPos(v,lis,0,m,v[i]);
                p[i]=lis[k];
                lis[k]=i;

            }
    }


    g<<m+1<<'\n';
    for(int i=0;i<=m;++i)
        g<<v[p[lis[i]]]<<' ';

    return 0;

}