Pagini recente » Diferente pentru problema/perfect intre reviziile 8 si 7 | Cod sursa (job #2641141) | Cod sursa (job #3302345) | Diferente pentru monthly-2014/format intre reviziile 4 si 3 | Cod sursa (job #872454)
Cod sursa(job #872454)
#include <cstdio>
#include <cstdlib>
#include <vector>
using namespace std;
vector<int>s[100000];
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
int n, i, j, *v, *next, *cnt, k=0, start;
scanf("%d", &n);
v=(int*)malloc(4*n); next=(int*)malloc(4*n); cnt=(int*)malloc(4*n);
for (i=0; i<n; ++i) cnt[i] = 1;
for (i=0; i<n; ++i)
scanf("%d", v+i);
for (i=n-2; i>=0; --i)
for (j=i+1; j<n; ++j)
if (v[j] > v[i])
s[i].push_back(j);
for (i=n-1; i>=0; --i)
{
int size=s[i].size(), maxim=0, poz=i;
for (j=0; j<size; ++j)
if (maxim < cnt[s[i][j]])
{
maxim = cnt[s[i][j]];
poz = s[i][j];
}
s[i].clear();
cnt[i] += maxim;
if (cnt[i] > k)
{
k = cnt[i];
start = i;
}
next[i] = poz;
}
printf("%d\n", k);
for (i=0; i<k; ++i)
{
printf("%d ", v[start]);
start = next[start];
}
return 0;
}