Cod sursa(job #1766646)

Utilizator Ruxandra985Nanu Ruxandra Laura Ruxandra985 Data 28 septembrie 2016 11:48:36
Problema Subsir crescator maximal Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <cstdio>

using namespace std;
int v[100001],d[100001],t[100001],sol[100001];
FILE *fin=fopen ("scmax.in","r");
FILE *fout=fopen ("scmax.out","w");
int main()
{
    int ed,i,st,dr,mid,el,x,n;
    fscanf (fin,"%d",&n);
    for (i=1;i<=n;i++)
        fscanf (fin,"%d",&v[i]);
    ed=1;
    d[1]=1;
    for (i=2;i<=n;i++){
        st=1;
        dr=ed;
        while (st<=dr){
            mid=(st+dr)/2;
            if (v[d[mid]]>v[i])
                dr=mid-1;
            else st=mid+1;
        }
        if (st==ed+1)
            ed++;
        d[st]=i;
        t[i]=d[st-1];
    }
    fprintf (fout,"%d\n",ed);
    x=d[ed];
    el=0;
    while (x){
        sol[++el]=v[x];
        x=t[x];
    }
    for (i=el;i>0;i--)
        fprintf (fout,"%d ",sol[i]);
    return 0;
}