Pagini recente » Cod sursa (job #1284975) | Cod sursa (job #494559) | Cod sursa (job #1157223) | Cod sursa (job #872133) | Cod sursa (job #1792943)
//package lis;
import java.io.*;
import java.util.StringTokenizer;
/**
* Created on 30.10.2016.
*/
public class Main {
public static void main(String[] args) throws IOException {
InputReader reader = new InputReader("scmax.in");
int[] data = readInput(reader);
int[] results = solveTasks(data);
writeResults(results);
}
private static int[] readInput(InputReader 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) throws IOException {
BufferedWriter writer = new BufferedWriter(new FileWriter("scmax.out"));
writer.write(data.length + "\n");
for (int number : data) {
writer.write(number + " ");
}
writer.close();
}
private static class InputReader {
BufferedReader reader;
StringTokenizer tokenizer;
InputReader(String fileName) throws FileNotFoundException {
reader = new BufferedReader(new FileReader(fileName), 32768);
tokenizer = null;
}
String next() {
while (tokenizer == null || !tokenizer.hasMoreTokens()) {
try {
tokenizer = new StringTokenizer(reader.readLine());
} catch (IOException e) {
throw new RuntimeException(e);
}
}
return tokenizer.nextToken();
}
int nextInt() {
return Integer.parseInt(next());
}
}
}