import java.util.Arrays;
public class Postupnost {
public static int d(int i, int[] p) {
System.out.println("Ratam d(" + i + ", ...)");
int vysledok = 0;
for (int j=0; j<i; j++)
if (p[j] < p[i])
vysledok = Math.max(vysledok, d(j, p));
return 1 + vysledok;
}
public static int[] lis(int[] p) {
int[] d = new int[p.length];
int[] predchodzaVOptime = new int[p.length];
for (int i=0; i<p.length; i++) {
int vysledok = 0;
predchodzaVOptime[i] = -1;
for (int j=0; j<i; j++)
if (p[j] < p[i]) {
if (vysledok < d[j]) {
vysledok = d[j];
predchodzaVOptime[i] = j;
}
}
d[i] = 1 + vysledok;
}
int maxDlzka = 0;
int idxMaximalneho = 0;
for (int i=0; i<d.length; i++) {
if (maxDlzka < d[i]) {
maxDlzka = d[i];
idxMaximalneho = i;
}
}
int[] vysledok = new int[maxDlzka];
int aktualny = idxMaximalneho;
for (int i=vysledok.length-1; i>=0; i--) {
vysledok[i] = p[aktualny];
aktualny = predchodzaVOptime[aktualny];
}
return vysledok;
}
/**
* @param args
*/
public static void main(String[] args) {
int[] p = {5, 3, 1, 4, 6, 10, 8, 7};
System.out.println(Arrays.toString(lis(p)));
}
}