Pagini recente » Cod sursa (job #1375411) | Cod sursa (job #2958525) | Cod sursa (job #1251242) | Cod sursa (job #1306512) | Cod sursa (job #1792916)
//package lis;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;
/**
* Created on 30.10.2016.
*/
public class Main {
public static void main(String[] args) throws FileNotFoundException {
Scanner reader = new Scanner(new FileReader(args[0]));
int[] data = readInput(reader);
int[] results = solveTasks(data);
writeResults(results);
reader.close();
}
private static int[] readInput(Scanner reader) {
int n = reader.nextInt();
int data[] = new int[n];
for (int i = 0; i < n; i++) {
data[i] = reader.nextInt();
}
return data;
}
private static int lowerBound(int[] array, int left, int right, int key) {
int n = array.length;
while (true) {
int mid = (left + right ) / 2;
if (array[mid] >= key) {
right = mid -1;
if (right < left)
return mid;
} else {
left = mid + 1;
if (right < left)
return mid < n - 1 ? right + 1 : -1;
}
}
}
private static int[] solveTasks(int[] data) {
int[] pos = new int[data.length];
int[] c = new int[data.length];
int sol = Integer.MIN_VALUE;
for (int i = 0; i < data.length; i++) {
c[i] = Integer.MAX_VALUE;
int index = lowerBound(c, 0, i, data[i]);
pos[i] = index;
c[index] = data[i];
sol = Math.max(sol, index);
}
int[] result = new int[sol + 1];
for (int i = data.length - 1; sol >= 0; i--) {
if (pos[i] == sol) {
result[sol--] = data[i];
}
}
return result;
}
private static void writeResults(int[] data) {
System.out.println(data.length);
for (int number : data) {
System.out.print(number + " ");
}
}
}