Cod sursa(job #863498)

Utilizator alex45meOlaru Alex alex45me Data 23 ianuarie 2013 21:06:21
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 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,k,kk;

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];
               k=i;
          }

      }

     fprintf(g,"%d\n",mx);
     kk=a[k];
     for (i=k;i>=1;i--)
           if (a[i]==kk) {b[0]++; b[b[0]]=v[i];kk--;}
     for (i=b[0];i>=1;i--) fprintf(g,"%d ",b[i]);
     fclose(g);
	return 0;
}