백준공부/java
[백준] 2352번 반도체 설계 (gold 2
gomduri43
2024. 5. 19. 18:55
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int n=Integer.valueOf(br.readLine());
int[] num=new int[n+1];
StringTokenizer st=new StringTokenizer(br.readLine());
for(int i=1; i<=n; i++){
num[i]=Integer.valueOf(st.nextToken());
}
int[] dp=new int[n+1];
int start=1;
int end=1;
//lis이용하면 쉽게 풀리는 문제
dp[1]=num[1];
for(int i=2; i<=n; i++){
if(num[i]>dp[end]){
dp[++end]=num[i];
}
else{
lis(start, end, dp, num[i]);
}
}
int answer=0;
for(int i=1; i<=n; i++){
if(dp[i]!=0){
answer++;
}
}
System.out.println(answer);
}
public static void lis(int s ,int e, int[] dp, int input){
int mid=0;
while(s<=e){
mid=(s+e)/2;
if(input>dp[mid]){
s=mid+1;
}
else if(input<dp[mid]){
e=mid-1;
}
}
if(dp[s]>input){
dp[s]=input;
}
}
}