Cod sursa(job #1700266)

Utilizator tiberiu.bucur17Tiberiu Constantin Emanoil Bucur tiberiu.bucur17 Data 9 mai 2016 22:32:11
Problema Subsir crescator maximal Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.04 kb
#include <stdio.h>
int v[100000],a[100000],poz[100000];
int cbin(int e,int n)
{
    int i=0,j=n,mij;
    while(i<=j)
    {
        mij=(i+j)/2;
        if(e<a[mij])
            j=mij-1;
        else
            if(e>a[mij])
                i=mij+1;
        else
            return mij;
    }
    return i;
}
int main()
{
    FILE *fin,*fout;
    fin=fopen("scmax.in","r");
    fout=fopen("scmax.out","w");
    int n,i,lung,p,j;
    fscanf(fin,"%d",&n);
    for(i=0;i<n;i++)
        fscanf(fin,"%d",&v[i]);
    a[0]=v[0];
    lung=poz[0]=0;
    for(i=1;i<n;i++)
    {
        p=cbin(v[i],lung);
        a[p]=v[i];
        poz[i]=p;
        if(p>lung)
            lung=p;
    }
    fprintf(fout,"%d\n",lung+1);
    j=n-1;
    while(j>=0 && poz[j]!=lung)
        j--;
    a[lung]=v[j];
    for(i=lung-1;i>=0;i--)
    {
        j--;
        while(j>=0 && poz[j]!=i)
            j--;
        a[i]=v[j];
    }
    for(i=0;i<=lung;i++)
        fprintf(fout,"%d ",a[i]);
    fclose(fin);
    fclose(fout);
    return 0;
}