Cod sursa(job #1431447)

Utilizator Bodirlau_Alexandra_Maria_322CABodirlau Alexandra Maria Bodirlau_Alexandra_Maria_322CA Data 9 mai 2015 10:46:50
Problema Subsir crescator maximal Scor 0
Compilator java Status done
Runda Arhiva educationala Marime 1.63 kb
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.Scanner;

public class Main {	
	int n;
	int[] v;
	
	Main(int n) {
		this.n = n;
		v = new int[n];
	}
	
	public int[] scmax() {
		int[] aux = new int[n];
		int j, i, max = 0;
		
		aux[0] = 1;
		for (i = 1; i < n; i++) {
			aux[i] = 1;
			for (j = i - 1; j >= 0; j--) {
				if (v[j] < v[i]) {
					aux[i] = aux[j] + 1;
					if (max < aux[i]) {
						max = aux[i];
					}
					break;
				}
			}
		}
		
		i = n - 1;
		j = max - 1;
		int[] u = new int[max];
		
		while (aux[i] < max) {
			i--;
		}
		
		u[j--] = v[i--];
		max--;
		
		while (j >= 0) {
			if (aux[i] == max) {
				if (u[j + 1] > v[i]) {
					u[j--] = v[i--];
					max--;
				}
			}
			else {
				i--;
			}
		}
		return u;
	}
	
	public static void main(String[] args) {
		FileInputStream input;
		FileOutputStream output;
		
		try {
			input = new FileInputStream("scmax.in");
			output = new FileOutputStream("scmax.out");
			Scanner sc = new Scanner(input);
			PrintWriter printer = new PrintWriter(output);
			int n;
			int[] u;
			
			n = sc.nextInt();
			Main m = new Main(n);
			
			for (int i = 0; i < m.n; i++) {
				m.v[i] = sc.nextInt();
				System.out.print(m.v[i] + " ");
			}
			System.out.println(" ");
			
			u = m.scmax();
			for (int i = 0; i < u.length; i++) {
				printer.write(String.valueOf(u[i]) + " ");
			}
			printer.write("\n");
			sc.close();
			printer.close();
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}

}