Pagini recente » Cod sursa (job #2397315) | Cod sursa (job #1199517) | Cod sursa (job #999082) | Cod sursa (job #1144023) | Cod sursa (job #523243)
Cod sursa(job #523243)
#include<stdio.h>
long n, maxlg, nrmaxlg, indicemaxlg, max, lg[1001], u[1001], nr[1001], a[1001], nrr;
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%ld", &n);
for (long i = 1; i <= n; i ++)
scanf("%ld", &a[i]);
for (long j = n; j >= 1; j --)
{
maxlg = 0;
nrmaxlg = 0;
indicemaxlg = 0;
for (long i = j + 1; i <= n; i ++)
if (maxlg < lg[i] && a[i] > a[j])
{
maxlg = lg[i];
nrmaxlg = nr[i];
indicemaxlg = i;
}
else if (maxlg == lg[i] && a[i] > a[j]) nrmaxlg += nr[i];
lg[j] = maxlg+1;
u[j] = indicemaxlg;
if(nrmaxlg == 0) nr[j] = 1; else nr[j] = nrmaxlg;
}
max = 0, nrr = 0;
for (long i = 1; i <= n; i ++)
if (max < lg[i]) {max = lg[i], nrr = i;}
printf("%ld\n", max);
while (nrr != 0)
{
printf("%ld ", a[nrr]);
nrr = u[nrr];
}
return 0;
}