群里分享的模板,O(nlogn),真心精简……
最近接触了函数 count_if 也一起记录进去了。
修改自:http://paste.ubuntu.com/6230037/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<functional>
using namespace std;
const int N = 131072;
int n = 7, a[N] = {0,0,1,1,0,0,2};
template<class Cmp>
int LIS (Cmp cmp)
{
static int m, end[N];
m = 0;
for (int i=0;i<n;i++)
{
int pos = lower_bound(end, end+m, a[i], cmp)-end;
end[pos] = a[i], m += pos==m;
}
return m;
}
bool greater1(int value)
{
return value >=1;
}
int main ()
{
cout << LIS(less<int>()) << endl; //严格上升
cout << LIS(less_equal<int>()) << endl; //非严格上升
cout << LIS(greater<int>()) << endl; //严格下降
cout << LIS(greater_equal<int>()) << endl;//非严格下降
cout << count_if(a,a+7,greater1) << endl; //计数
//第二个参数为末尾元素的下一个位置
return 0;
}
//OUT:
//3 5 2 4 3