Mai intai trebuie sa te autentifici.
Cod sursa(job #1446355)
Utilizator | Data | 1 iunie 2015 16:56:45 | |
---|---|---|---|
Problema | Subsir crescator maximal | Scor | 70 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.72 kb |
#include <stdio.h>
const int MAX_N = 100000;
int v[MAX_N + 1], L[MAX_N + 1], next[MAX_N + 1];
int main() {
freopen( "scmax.in", "r", stdin );
freopen( "scmax.out", "w", stdout );
int N;
scanf("%d", &N); L[N] = 1, next[N] = 0;
for(register int i = 1; i <= N; ++ i)
scanf("%d", &v[i]);
for (register int i = N - 1; i > 0; -- i) {
L[i] = 1, next[i] = 0;
for (register int j = i + 1; j <= N; ++ j)
if (v[i] < v[j] and L[j] + 1 > L[i])
L[i] = L[j] + 1, next[i] = j;
}
int lis = L[1], poz = 1;
for(register int i = 2; i <= N; ++ i)
if(L[i] > lis)
lis = L[i], poz = i;
printf("%d\n", lis);
int x = poz;
while(true) {
printf("%d ", v[x]);
x = next[x];
if (!x)
break;
}
printf("\n");
return 0;
}