Pagini recente » Cod sursa (job #1851086) | Cod sursa (job #1110452) | Istoria paginii utilizator/sexyatletico | Cod sursa (job #999473) | Cod sursa (job #410574)
Cod sursa(job #410574)
#include <cstdio>
#define inf 100000
#define nmax 5005
using namespace std;
int N, i, j, best [nmax],min, a [nmax], poz [nmax], afis [nmax], cnt;
int MIN, maxim , t, maxv;
int main () {
freopen ("subsir2.in", "r", stdin);
freopen ("subsir2.out", "w", stdout);
scanf ("%d\n", &N);
for (i = 1; i <= N; i++)
scanf ("%d", &a [i]);
best [N] = 1;
poz [N] = N;
for (i = N - 1; i >= 1; i--) {
best [i] = min = inf;
for (j = i + 1; j <= N; j++)
if (a [i] <= a [j] && min > a [j]) {
min = a [j];
if (best [i] > best [j] + 1)
best [i] = best [j] + 1, poz [i] = j;
else if (best [i] == best [j] + 1)
if (a [poz [i]] > a [j])
poz [i] = j;
}
if (best [i] == inf) best [i] = 1, poz [i] = i;
}
for (i = 1; i <= N; i++)
if (maxim < best [i])
maxim = best [i],maxv = a [i], t = i;
printf ("%d\n", maxim);
while (t) {
printf ("%d ", t);
if (t == poz [t]) break;
t = poz [t];
}
return 0;
}