Cod sursa(job #1430642)

Utilizator Baclava_Georgiana_Liliana_322CBBaclava Georgiana Liliana Baclava_Georgiana_Liliana_322CB Data 8 mai 2015 18:20:01
Problema Subsir crescator maximal Scor 0
Compilator java Status done
Runda Arhiva educationala Marime 1.14 kb
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();
	}
}