Cod sursa(job #863657)

Utilizator lehman97Dimulescu David lehman97 Data 23 ianuarie 2013 22:51:27
Problema Subsir crescator maximal Scor 95
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>
#include <stdio.h>

using namespace std;

FILE *f=fopen("scmax.in","r");
FILE *g=fopen("scmax.out","w");

int mxx,nr,i,n,a[100000],c[100000],mx,k,j,s[100000];

void drum(int k)
{
    int j;
    for(j=k;j>=1;j--)
    if(s[j]==mxx)
    {
        if(mxx>1)
        {
            mxx--;
            drum(j);
        }
        break;
    }
    fprintf(g,"%d ",a[j]);
}

int cauta(int nr)
{
   int p,m,u,mx;
   mx=0;
   p=1;
   u=c[0];
   while (p<=u)
   {
       m=(p+u)/2;
       if(c[m]<nr)
       {
           if(m>mx)mx=m;
           p=m+1;
       } else u=m-1;

   }
   return mx;

}



int main()
{
    mxx=0;
    fscanf(f,"%d",&n);
    for(i=1;i<=n;i++)
        fscanf(f,"%d",&a[i]);
    c[0]=1;
    c[1]=a[1];
    //a[1]=1;

    for (i=2;i<=n;i++)
    {
        nr=cauta(a[i]);
        if(nr==c[0])
          {
              c[0]++;
              c[nr+1]=a[i];
          } else  c[nr+1]=a[i];
        s[i]=nr+1;
        if (s[i]>mxx) {mxx=s[i];k=i;};
    }

    fprintf(g,"%d\n",mxx);
    i=0;
    drum(k);
    fclose(g);
    return 0;
}