题目链接:HLOJ 1563 气球排序。
#include<iostream>
#include<vector>
#include<cstdio> //ZOJ 用scanf,printf时必须包含此头文件
using namespace std;
const int N=20000;
int v[N];//存放输入的数值
int a[N];//辅助数组,存放左边小于中间数的数,右边大于中间数的数
int f[N];//辅助数组,存放LOS长度
//状态:f[i],以第i个元素(v[i])为最后一个元素的最长上升子序列的长度
//方程:f[i]=max(f[j]+1, f[i]), 0<=j<i && v[i]>v[j]
//初值:f[i]=1,0<=i<n,考虑只有v[i]一个数时的上升序列的长度
//结果:f[]中的最大值
int BSearch(vector <int> a, int t) //二分查找
{
int n=a.size(), low=0, high=n-1;
while (low<=high)
{
int mid=(low + high)/2;
if (t==a[mid]) return mid;
else if (t>a[mid]) low=mid+1;
else high=mid-1;
}
return low;
}
int LosBS(int a[],