一.朴素算法
关于最长上升或不下降的子序列的朴素求法我就不用说了吧,直接一个的时间复杂度,附代码:
#include <cstdio>
#define M 100005
#define r register //加速器而已
#define max(a, b) a > b ? a : b
int n, a[M], LIS[M], ans; //a是原数组
int main (){
scanf("%d", &n);
for(r int i = 1; i <= n; i ++){
scanf("%d", &a[i]);
LIS[i] = 1;
}
for(r int i = 1; i <= n; i ++){
for(r int j = 1; j < i; j ++){
if(a[j] < a[i])
LIS[i] = max (LIS[i], LIS[j] + 1);
}
}
for(r int i = 1; i <= n; i ++)
ans = max (ans, LIS[i]);
printf("%d\n", ans);
return 0;
}
但这样的时间复杂度在处理大数据的时候太浪费时间了,于是我们引进STL。