Cod sursa(job #809288)

Utilizator tzipleatudTudor Tiplea tzipleatud Data 8 noiembrie 2012 08:40:00
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <fstream>
#define NM 100010

using namespace std;

ifstream f("scmax.in");
ofstream g("scmax.out");

int N;
int i,j,k;
int L[NM],S[NM];
int V[NM];
int X;
int ANS=0;

int GetPos (int X)
{
  int P=0, U=ANS, M, R=1;

  while (P<=U)
  {
    M=(P+U)/2;

    if (X>S[M])
    {
      P=M+1;
      R=M;
    }
    else
      U=M-1;
  }

  return R+1;
}

int main ()
{
  f >> N;
  for (i=1; i<=N; i++)
  {
    f >> X;
    j=GetPos(X);
    L[i]=j;
    S[j]=X;
    if (j>ANS)
    {
      ANS=j;
      k=i;
    }
    V[i]=X;
  }

  g << ANS << '\n';

  while (k>=1)
  {
    S[++S[0]]=V[k];
    for (i=k; i>=0; i--)
      if (L[i]+1==L[k])
      {
        k=i;
        break;
      }
  }

  for (i=S[0]; i>=1; i--)
    g << S[i] << ' ';

  g << '\n';

  f.close();
  g.close();

  return 0;
}