优化后,不需要再定义一个数组存放当前元素最长序列的长度,而是在输入数据的同时进行最长序列的存放。 缺点:存放后的数组只是长度为最长序列的长度,但是元素的内容却不是最长序列的内容,若需要记录最长序列的排序,则需要另外一个数组用于记录。 #include<iostream> #include<stdio.h> #include<algorithm> using namespace std; int data[100010]; int main() { int n; while(scanf("%d", &n) != EOF) { int res = 1; for(int i = 0; i < n; i++) { scanf("%d", &data[i]); int *pos = lower_bound(data, data + res, data[i]); if(res == pos - data) res++; *pos = data[i]; } cout<<res<<endl; } return 0; }