《算法导论》
习题15.4-6
设计一个O(n lg n)时间的算法,求一个n个数的序列的最长单调递增子序列。
#include <vector>
#include <iostream>
#include <cassert>
#include <algorithm>
int main(int argc, char** argv) {
std::vector<int> data{1,4,2,3,2,2,4}, seq;
assert(!data.empty());
seq.push_back(data.front());
for(size_t j = 1; j != data.size(); ++j){
auto pos = lower_bound(seq.begin(), seq.end(), data[j]);
if(pos == seq.end()){
seq.push_back(data[j]);
}else{
*pos = data[j];
}
}
for(auto ele: seq) std::cout<<ele<<" ";
std::cout<<"\n";
return 0;
}