Pagini recente » Cod sursa (job #1312699) | Cod sursa (job #2436860) | Cod sursa (job #2335513) | Cod sursa (job #363369) | Cod sursa (job #1054421)
#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;
}