Cod sursa(job #2924663)

Utilizator Ilie_MityIlie Dumitru Ilie_Mity Data 7 octombrie 2022 20:24:00
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
//Ilie Dumitru
#include<cstdio>
#include<cstring>

const int NMAX=100005;
int smallest[NMAX], N, v[NMAX], pozModified[NMAX], lmax, sol[NMAX];

int main()
{
    FILE* f=fopen("scmax.in", "r"), *g=fopen("scmax.out", "w");
    int i, j, l, r, m;

    fscanf(f, "%d", &N);
    for(i=0;i<N;++i)
        fscanf(f, "%d", v+i);
    fclose(f);

    smallest[0]=v[0];
    lmax=1;
    for(i=1;i<N;++i)
    {
        l=-1;
        r=lmax;
        while(r-l>1)
        {
            m=(r+l)>>1;
            if(smallest[m]<v[i])
                l=m;
            else
                r=m;
        }
        smallest[(pozModified[i]=r)]=v[i];
        if(r==lmax)
            ++lmax;
    }

    j=lmax-1;
    for(i=N-1;i>-1;--i)
        if(pozModified[i]==j)
            sol[j--]=v[i];

    fprintf(g, "%d\n", lmax);
    for(i=0;i<lmax;++i)
        fprintf(g, "%d ", sol[i]);

    fclose(g);

    return 0;
}