Pagini recente » Cod sursa (job #2080204) | Cod sursa (job #2714899) | Cod sursa (job #2398624) | Cod sursa (job #2824581) | Cod sursa (job #895627)
Cod sursa(job #895627)
#include<cstring>
#include<cstdio>
using namespace std;
const int NMAX = 100009;
const int DIM = 262144;
int a[NMAX], best[NMAX], n, pre[NMAX], maxim, poz;
char c[DIM + 10], *p;
inline void read_Data();
inline void solve();
int main()
{
freopen("scmax.in", "rt", stdin); freopen("scmax.out", "wt", stdout);
read_Data();
solve();
printf("%d\n", maxim);
int i;
for(i = poz; pre[i] != -1; i = pre[i])
if(a[i]) printf("%d ", a[i]);
printf("%d\n", a[i]);
return 0;
}
inline void read_Data()
{
scanf("%d", &n);
fread(c, 1, DIM, stdin);
int nbr, k = 0;
for(p = c + 1; *p; )
if(*p != ' ' && *p != '\n')
{
nbr = 0;
while(*p >= '0' && *p <= '9')
{
nbr = nbr * 10 + *p - '0';
++p;
}
a[++k] = nbr;
}
else
++p;
}
inline void solve()
{
best[n] = 1;
maxim = 1, poz = n;
pre[n] = -1;
memset(pre, -1, sizeof(pre));
for(int i = n; i > 1; --i)
for(int j = i - 1; j >= 1; --j)
{
if(a[j] < a[i] && best[j] <= best[i])
{
best[j] = 1 + best[i];
if(best[j] > maxim) maxim = best[j], poz = j;
pre[j] = i;
}
}
}