Cod sursa(job #1862832)

Utilizator Marius7122FMI Ciltea Marian Marius7122 Data 30 ianuarie 2017 12:29:53
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <stdio.h>
#define maxn 100005

int n,i,m;
long v[maxn],rez[maxn],poz[maxn];
long sol[maxn];

void BS(int x,int i)
{
    int r=0,pas=1<<17;

    while(pas!=0)
    {
        if(r+pas<=m && rez[r+pas]<x)
            r+=pas;
        pas/=2;
    }
    if(r==m)
        rez[++m]=x;
    else
        rez[m]=x;
    poz[i]=m;
}

int main()
{
    FILE *f1,*f2;
    f1=fopen("scmax.in","r");
    f2=fopen("scmax.out","w");

    fscanf(f1,"%d",&n);
    for(i=1;i<=n;i++)
    {
        fscanf(f1,"%ld",&v[i]);
        BS(v[i],i);
    }

    fprintf(f2,"%d\n",m);

    for(i=n;i && m;i--)
        if(poz[i]==m)
            sol[m--]=v[i];

    i=1;
    while(sol[i])
        fprintf(f2,"%ld ",sol[i++]);

    return 0;
}