Pagini recente » Cod sursa (job #2182971) | Cod sursa (job #2869392) | Cod sursa (job #531587) | Cod sursa (job #1627036) | Cod sursa (job #1156921)
#include <fstream>
#define NMAX 100005
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n, a[NMAX];
int p[NMAX], prec[NMAX];
int dimp;
int caut(int x)
{
int step = 1;
while (step < dimp) step <<= 1;
int i;
for (i = 1; step; step >>= 1)
if (i+step <= dimp && p[i+step] <= x) i += step;
if (p[dimp] < x ) return dimp+1;
if (p[i]<x) return i+1;
return i;
}
int main()
{
int poz;
fin>>n;
for (int i = 1; i <= n; ++i)
fin>>a[i];
for (int i = 1; i <= n; ++i)
{
poz = caut(a[i]);
p[poz] = a[i];
prec[i] = poz;
if (poz > dimp) ++dimp;
}
fout<<dimp<<'\n';
for (int i = 1; i <= dimp; ++i)
fout<<p[i]<<" ";
return 0;
}