最长上升子序列

来源:互联网 发布:java怎么获取当前时间 编辑:程序博客网 时间:2024/06/05 04:23


import java.io.BufferedInputStream;import java.io.PrintWriter;import java.io.StreamTokenizer;import java.util.ArrayList;import java.util.Arrays;import java.util.HashMap;import java.util.Scanner;public class Main{   public static void main(String[] args) throws Exception{   StreamTokenizer cin = new StreamTokenizer(new BufferedInputStream(System.in));  PrintWriter cout = new PrintWriter(System.out);                 int[] dp = new int[100008] ;         int  top ;   while(cin.nextToken() != cin.TT_EOF){   int n = (int) cin.nval ;   top = 0 ;   cin.nextToken() ;   dp[++top] = (int) cin.nval ;   for(int i = 1 ; i < n ; i++){     cin.nextToken() ;     int x = (int) cin.nval ;     if(x > dp[top]) dp[++top] = x ;     else{       int l = 1 , r = top , m  , k = -1 ;       while(l <= r){          m = (l + r) >> 1 ;              if(dp[m] >= x){                r = m - 1 ;                k = m ;              }              else  l = m + 1 ;       }       dp[k] = x ;     }   }      cout.println(top) ;  // cout.flush() ;   }     cout.flush()  ;   }   }


0 0
原创粉丝点击