寻找最大子序列
using namespace std;
#define Max 100000
int a[100]; //用来存储序列数
int dp[100]; //用来存储长度为i时 的结尾元素的值,也就是在该长度时的最大值
int main()
{
int n;
cin >> n;
int i;
for (i=0;i<n;i++)
{
cin >> a[i];
dp[i] = Max; //刚开始初始化为最大为很大
}
int index = 0; //表示最长序列的下标
dp[0] = a[0]; //刚开始长度为 0 + 1 时的最大值为序列初值
for (i=0;i<n;i++)
{
if (a[i] > dp[index]) //如果一个数大于dp中的最大值,表明这个数可以加入
dp[++index] = a[i];
else //否则,寻找dp中小于等于a[i] 的下标
dp[lower_bound(dp,dp+index+1,a[i]) - dp] = a[i];
}
cout << index+1 << endl;
return 0;
}