int getLis(){
int a,b[10000];
int cnt = 0;
b[0] = 0;
for (int i = 0; i < n; i++)
{
scanf("%d", &a);//一个一个的输入序列
if (b[cnt] <= a) {
cnt++;
b[cnt] = a;
}
else {
int pos = lower_pound(b, b + cnt, a) - b;
b[pos] = a;
}
}
}
这个函数是求最长上升子序列有多少个元素;
稍微改变一下
int getLis(){
int a,b[10000];
int cnt = 0;
b[0] = 0;
for (int i = 0; i < n; i++)
{
scanf("%d", &a);//一个一个的输入序列
if (b[cnt] >= a) {
cnt++;
b[cnt] = a;
}
else {
int pos = lower_bound(b, b + cnt, a) - b;
b[pos] = a;
}
}
}
这个函数是求在一个序列中最长上升子序列有多少个。
lower_pound:大于或等于val的第一个元素位置,如果所有元素都小于val,则返回last的位置,且last的位置是越界的!!
upper_pound:大于val的第一个元素位置,如果val大于数组中全部元素,返回的是last。