(未完成)

#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int a[N],f1[N],len1,f2[N],len2,num,n=1;
/* a[]:原数列 f1[]:最长不上升子序列1,记录第一套拦截系统能拦截的导弹 len1:f1[]的长度 f2[]:最长不上升子序列2,记录第i套拦截系统能拦截的最高的高度 len2:f2[]的长度 num:最少要配备的导弹拦截系统的数量 n:导弹总数 */
int main()
{
    while (scanf("%d",&a[n])) n++; n--;
    for (int i=1;i<=n;i++)
    {
    	int k=lower_bound(f+1,f+1+len1,a[i])-a; //k=f[]从1~n中第一个≥a[i]的值的位置
	    f[k+1]=a[i];
	    len1=k+1;
	    k=lower_bound(f+1,f+1+len1,a[i])-a;
	}
    return 0;
}