bezoar17
1/9/2016 - 1:20 PM

lcs_nlog_n.cpp

class Solution {
public:
    int ceilindex(vector<int> arr,int l,int r,int val){
        while(r-l>1){
            int mid=l+(r-l)/2;
            if(arr[mid]>=val)
                r=mid;
            else
                l=mid;
        }
        return r;
    }
    int lengthOfLIS(vector<int>& nums) {
        if(nums.size()==0) return 0;
        vector<int> temp;
        temp.push_back(nums[0]);
        
        for(int i=1;i<nums.size();i++){
            
            if(nums[i]<temp[0])
                temp[0]=nums[i];
            else if(nums[i]>temp[temp.size()-1])
                temp.push_back(nums[i]);
            else
                temp[ceilindex(temp,-1,temp.size()-1,nums[i])]=nums[i];
            
        }
        return temp.size();
        
    }
};