Pagini recente » Cod sursa (job #1883561) | Rating Traian Simedru (sevenraian) | Cod sursa (job #2842010) | Cod sursa (job #2398072) | Cod sursa (job #1430642)
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;
public class Main {
public static int[] a;
public static int[] p;
public static int cauta(int i, int sum, int x){
int h;
while(i <= sum){
h = (i+sum)/2;
if(x < a[p[h]])
i = h + 1;
else
sum = h - 1;
}
return i;
}
public static void main(String[] args) throws IOException{
Scanner reader = new Scanner(new FileInputStream("scmax.in"));
int N = reader.nextInt();
a = new int [N];
p = new int [N];
int[] poz = new int [N];
int lung = 0;
for(int i = 0; i < N; i++){
a[i] = reader.nextInt();
}
a[0] = 1234567890;
for(int i = N; i > 0; i--){
poz[i] = 0;
int k = cauta(1,lung,a[i]);
if(k > lung){
poz[i] = p[k-1];
lung = k;
p[k] = i;
}
else{
poz[i] = p[k-1];
if(a[p[k]] < a[i])
p[k] = i;
}
}
PrintWriter writer = new PrintWriter("scmax.out");
writer.write(String.valueOf(lung) + "\n");
for(int i = p[lung]; i > 0; i = poz[i]){
writer.write(String.valueOf(a[i] + " "));
}
writer.write("\n");
reader.close();
writer.close();
}
}