Cod sursa(job #2058572)

Utilizator alexnekiNechifor Alexandru alexneki Data 5 noiembrie 2017 20:28:57
Problema Subsir crescator maximal Scor 60
Compilator java Status done
Runda Arhiva educationala Marime 1.87 kb

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Stack;

public class Main {

  static int[] v;
  static ArrayList<Integer> seq;
  
  static int binarySearch(int from, int to, int val) {
    if(from < to) {
      int mid = (from + to + 1) / 2;
      if(v[seq.get(mid)] < val)
        return binarySearch(mid, to, val);
      else
        return binarySearch(from, mid - 1, val);
    } else
      return from;
  }
  
  public static void main(String[] args) throws FileNotFoundException, IOException {
    Scanner in =  new Scanner(new BufferedReader(new FileReader("scmax.in")));
    PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("scmax.out")));
    
    int n = in.nextInt();
    v = new int[n];
    int[] parent = new int[n];
    
    for(int i=0; i<n; i++) {
      v[i] = in.nextInt();
      parent[i] = -1;
      //out.println(v[i]);
    }
    seq = new ArrayList<>();
    seq.add(0);
    for(int i=1; i<n; i++) {
      if(v[i] <= v[seq.get(0)])
        seq.set(0, i); //I am hoping to find v[i] + 1, v[i] + 2 ... seq.get(0) next, so that I can build a longer sequence
      else {
        int index = binarySearch(0, seq.size() - 1, v[i]) + 1;
        if(index >= seq.size())
          seq.add(i);
        else
          seq.set(index, i);
        parent[i] = seq.get(index - 1);
      }
    }
    Stack<Integer> st = new Stack<>();
    int el = seq.get(seq.size() - 1);
    while(el > 0) {
      st.push(v[el]);
      el = parent[el];
    }
    out.println(st.size());
    while(!st.isEmpty()) {
      out.print(st.pop() + " ");
    }
    
    in.close();
    out.close();
  }
  
}