Pagini recente » Cod sursa (job #1270345) | Cod sursa (job #1745314) | Cod sursa (job #2278666) | Cod sursa (job #2196736) | Cod sursa (job #1547774)
#include <iostream>
#include <cstdio>
using namespace std;
const int dmax = 100000;
int best[dmax+1]; // best[i] = LUNGIMEA MAX A UNUI SUBSIR CARE SE TERMINA PE POZITIA i
int pre[dmax+1]; // pre[i] = POZITIA VALORII CARE PRECEDA ELEMENTUL DE PE POZITIA i
int v[dmax+1];
int N;
void calcul(int p)
{
if(pre[p] == -1) {printf("%d ", v[p]); return;}
calcul( pre[p] );
printf("%d ", v[p]);
}
int SCM(int a[dmax+1], int &p)
{
int i, j, L_max;
best[1] = 1; L_max = 1;
pre[1] = -1;
for(i = 2; i <= N; i++)
{
best[i] = 1;
pre[i] = -1;
for(j = 1; j < i; j++)
{
if(a[i] > a[j] && best[i] < 1 + best[j])
{
best[i] = 1 + best[j];
pre[i] = j;
if(L_max < best[i]) { L_max = best[i]; p = i; }
}
}
}
return L_max;
}
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
int i, p;
scanf("%d", &N);
for(i = 1; i <= N; i++) scanf("%d", &v[i]);
printf("%d\n", SCM(v, p));
calcul(p);
return 0;
}