知识点:LIS
思路:思路:res记录目前拥有炮弹系统的高度,len2为res数组长度也为系统数量,res[1]=第一个高度,遍历2~N的高度,找到比输入num大的最小数(用二分的函数),并将其替换成num,若该最小数不存在就将num存入res尾部,len2++。
代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 100005;
int res[maxn];
int main()
{
int N, num, len2;
while (~scanf("%d", &N))
{
len2 = 0;
memset(res, 0, sizeof(res));
cin >> num;
res[1] = num, len2++;
for (int i = 2; i <= N; i++)
{
cin >> num;
int idx2 = lower_bound(res + 1, res + len2 + 1, num) - res;
if (idx2 == len2 + 1)
len2++, res[len2] = num;
else
res[idx2] = num;
}
cout << len2 << endl;
}
return 0;
}