Pagini recente » Cod sursa (job #2523648) | Cod sursa (job #1102695) | Cod sursa (job #3149783) | Cod sursa (job #1527950) | Cod sursa (job #919048)
Cod sursa(job #919048)
#include <cstdio>
#include <algorithm>
#define N 100001
using namespace std;
int a[N], b[N], c[N], n, lg;
void prelucrare()
{
for (int i = 0; i < n; i++)
{
int pos = upper_bound(b, b + lg, a[i]) - b;
if (pos >= 0 && pos < lg)
{
if (b[pos - 1] == a[i])
continue;
b[pos] = a[i];
c[i] = pos;
}
else
{
if (b[lg - 1] == a[i])
continue;
b[lg ++] = a[i];
c[i] = lg - 1;
}
}
}
void print(int i)
{
if (i < 0 || lg < 0)
return;
while (i >= 0)
{
if (c[i] == lg)
{
lg--;
print(i - 1);
printf("%d ", a[i]);
return;
}
i--;
}
}
void read()
{
scanf ("%d", &n);
for (int i = 0; i < n; i++)
scanf ("%d", &a[i]);
}
int main()
{
freopen("cmlsc.in", "r", stdin);
freopen("cmlsc.out", "w", stdout);
read();
prelucrare();
lg--;
printf("%d\n", lg+1);
print(n - 1);
return 0;
}