Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int pos(std::vector<int> &tail, unsigned int lhs, unsigned int rhs, int key)
- {
- while(rhs - 1 > lhs)
- {
- int mid = lhs + (rhs - lhs) / 2;
- tail[mid] > key ? rhs = mid : lhs = mid;
- }
- if(rhs == tail.size() - 1)
- tail.push_back(INF);
- return rhs;
- }
- int LISLen(std::vector<int> &seq)
- {
- std::vector<int> tail(3);
- tail[0] = -INF, tail[1] = seq[0], tail[2] = INF;
- for(unsigned int i = 1; i < seq.size(); i++)
- tail[pos(tail, tail.size(), seq[i])] = seq[i];
- return tail.size() - 2;
- }
Add Comment
Please, Sign In to add comment