由这篇blog可以知道本题求的就是 最长上升子序列 和 最长下降子序列 的长度。
有一个问题,在求最长上升子序列的过程中,用到了lower_bound函数,求第一个大于等于t的数;
这里不能使用upper_bound函数,因为它求的是第一个大于t的数字,所以遇到相同的数也会加入LIS中,实际上是错的。
同理,在求最长下降子序列的过程中,需要求第一个小于等于t的数,如何求呢?
由于lower_bound函数的第4个参数可以自己设置比较函数,考虑自定义比较函数cmp。
与less完全相反的就是greater。即lower_bound(tgreater())求的是第一个小于t的数。
由上可知lower_bound(tless_equal())求的是第一个大于t的数。
由上可知lower_bound(tgreater_equal())求的是第一个小于等于t的数。