Cod sursa(job #863456)

Utilizator alex45meOlaru Alex alex45me Data 23 ianuarie 2013 20:27:16
Problema Subsir crescator maximal Scor 35
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>
#include <stdio.h>

using namespace std;


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

 int q[100005],a[100005],v[100005],mx,mx1,i,j,ok,n,p;

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




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];


      }

     fprintf(g,"%d",mx);

     fclose(g);
	return 0;
}