Cod sursa(job #863481)

Utilizator alex45meOlaru Alex alex45me Data 23 ianuarie 2013 20:50:34
Problema Subsir crescator maximal Scor 65
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 b[100005],q[100005],a[100005],v[100005],mx,mx1,i,j,ok,n,p;

int caut(int x)
{
   int p, u, m,mx;
   p = 1; u = q[0]; mx=0;
      while (p <= u)
   {
        m = (p+u)/2;
         if (q[m]<x) {
           if (m>mx) mx=m;
            p=m+1;
            }
       else  u=m-1;}
            return mx;

}




int main()
{
      fscanf(f,"%d",&n);
      for (i=1;i<=n;i++)
           fscanf(f,"%d",&v[i]);
      q[1]=v[1];
      q[0]=1;
      a[1]=1;
      for (i=2;i<=n;i++)
      {
          p=caut(v[i]);
          if (p==q[0])
          {
              q[0]++;
              q[p+1]=v[i];
            }
         else

         {
             q[p+1]=v[i];

         }
          a[i]=p+1;
          if (a[i]>mx) {
               mx=a[i];
               for (j=1;j<=mx;j++)
                    b[j]=q[j];
          }

      }

     fprintf(g,"%d\n",mx);
      for (i=1;i<=mx;i++)
             fprintf(g,"%d ",b[i]);
     fclose(g);
	return 0;
}