Cod sursa(job #1054421)

Utilizator vyrtusRadu Criuleni vyrtus Data 13 decembrie 2013 20:45:39
Problema Subsir crescator maximal Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>

#define inf 2 000 000 001
using namespace std;

int main()
{

  int n;
  unsigned long a[100000];

  ifstream fin ("scmax.in");
  ofstream fout ("scmax.out");

   fin >> n;
     for (int i=1;i<=n;i++)
        fin >> a[i];

 unsigned int r[100000];
 unsigned long maxim[100000];

for (int i=1; i<=n ; i++)
{
    r[i] = 0;
    maxim[i] = 100000;
}

unsigned long low,high,m,value;
for (int i=1; i<=n;i++)
{
value = a[i];
low=1;
high = n;

while (low!=high)
{
  m = (low + high) / 2;
  if (maxim[m] == value) {high = m ; low = m; break;}
  if (maxim[m]>value)  high = m;
      else if (maxim[m]<value) low = m+1;
}
maxim[low] = value;
r[i] = low;
}
value= r[1];

for(int i=1;i<=n;i++)
    if (r[i]>value) value = r[i];
fout << value << endl;

unsigned long rez[100000],poz=1;

for (int i=n;i>0;i--)
{
        if (r[i]== value ) {value --; rez[poz] = a[i]; poz++;}
}

for (int i=poz-1; i>0;i--)
    fout << rez[i] << " " ;

return 0;
}