본문 바로가기

백준

[백준] 12015 가장 긴 증가하는 부분 수열 2 [자바]

 

 


https://st-lab.tistory.com/285?category=948182 

 

[백준] 12015번 : 가장 긴 증가하는 부분 수열 2 - JAVA [자바]

https://www.acmicpc.net/problem/12015 12015번: 가장 긴 증가하는 부분 수열 2 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1..

st-lab.tistory.com

 

 


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;
 
public class Main {
	static long ans = 0;
 	public static void main(String[] args) throws IOException{
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();		
		//StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		int N = Integer.parseInt(br.readLine());
		int[] seq = new int[N];
		int[] LIS = new int[N];
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		
		for(int i = 0; i < N; i++) {
			seq[i] = Integer.parseInt(st.nextToken());
		}
		
		LIS[0] = seq[0];
		int lengthOfLIS = 1;
		
		for(int i = 1; i < N; i++) {
			
			int key = seq[i];
			
			if(LIS[lengthOfLIS - 1] < key) {
				lengthOfLIS++;
				LIS[lengthOfLIS - 1] = key;
			}
			else {
				int lo = 0;
				int hi = lengthOfLIS;
				
				while(lo < hi) {
					int mid = (lo + hi) >> 1;
					
					if(LIS[mid] < key) {
						lo = mid+1;
					}
					else {
						hi = mid;
					}
				}
				
				LIS[lo] = key;
			}
		}
		System.out.println(lengthOfLIS);
 	}
}

'백준' 카테고리의 다른 글

[백준] 10158 개미 [자바]  (0) 2022.09.08
[백준] 18353 병사 배치하기 [자바]  (0) 2022.09.08
[백준] 1300 K번째 수 [자바]  (0) 2022.08.29
[백준] 1007 벡터 매칭 [자바]  (0) 2022.08.17
[백준] 1865 웜홀 [자바]  (0) 2022.07.11