n*log(n)的最长上升子序列

 
  
#include 
#include 
#include 
#include 
#include 
#define  siz 100005

using namespace std;
int n,k;
int gp[siz];
int ans[siz],len,Max;
int ar[siz];
/*
    二分查找。 注意,这个二分查找是求下界的;  (什么是下界?详情见《算法入门经典》 P145)
    即返回 >= 所查找对象的第一个位置(想想为什么)

    也可以用STL的lowe_bound二分查找求的下界
*/

int binary_search1(int i){
    int left,right,mid;
    left=0,right=len;
    while(leftgp[i]) right=mid;
        else left=mid+1;
    }
    return left;
}
int binary_search2(int i){
    int left,right,mid;
    left=0,right=Max;
    while(left= ans[len])
            ans[++len] = gp[i];
        else{
            int pos = binary_search1(i);
            ans[pos] = gp[i];
            //cout<


你可能感兴趣的:(基础算法模板)