hdu 1950 Bridging signals--二分法求最长上升子序列
2012-07-16 19:15
225 查看
/** *p[i]存长度为i的上升子序列的最小末元素 *可以推出p[i]中的元素师按从小到大排列的, *因为长度为i的序列中可以找到一个长度为i-1的序列,长度为i-1的序列的末元素一定比长度为i的序列的末元素小,上升子序列么 *若p[i-1]比p[i]大,则上述中的长度为i-1的序列的末元素可以更新它 *若当前元素最大,则长度增加 *否则找到一个他可以更新的,更新之 * *题意:针脚之间有一些连线,有的交叉,现在不允许交叉,求最多能留下几根线 *以某一边为序,求一个最长上升子序列的长度即可,普通方法可能超时,所以用到二分 */ #include<stdio.h> int d[40010],p[40010],l; int main() { int t,n,i,sta,end,mid; scanf("%d",&t); while(t--) { scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&d[i]); p[1]=d[1]; l=1; for(i=2;i<=n;i++) { sta=1; end=l+1; while(sta<end) { mid=(sta+end)/2; if(d[i]<=p[mid]) end=mid; else sta=mid+1; } p[end]=d[i]; if(end==l+1) l++; } printf("%d\n",l); } return 0; }
相关文章推荐
- HDU-1950-Bridging signals【最长上升子序列(LIS)长度的O(nlogn)算法】
- hdu 1950 Bridging signals 最长上升子序列
- HDU 1950 最长上升子序列
- hdu 1950最长单调上升子序列
- 【HDU 1950】Bridging signals(LIS算法求最长上升子序列)
- hdu 1950 Bridging signals(最长上升子序列)
- HDU 1950最长上升子序列 学习nlogn
- HDU 1087(最长上升子序列)
- (hdu step 3.2.6)Monkey and Banana(在第一关键字有序的情况下,根据第二关键字求最长上升子序列的高度之和)
- hdu 1160 dp (二维最长上升子序列 记录路径
- hdu 1423 Greatest Common Increasing Subsequence 最长公共上升子序列
- hdu1160-最长上升子序列
- HDU 1160 FatMouse's Speed (最长上升子序列+记录路径)
- HDU 4512 最长公共上升子序列 巧妙应用
- HDU - 1025 Constructing Roads In JGShining's Kingdom (nlogn 最长上升子序列)
- HDU 1069 Monkey and Banana(LIS最长上升子序列)
- HDU 5773 The All-purpose Zero 第四场多校赛 LIS变形(最长上升子序列)
- hdu 5532 Almost Sorted Array 最长上升子序列
- HDU 1257 最少拦截系统(最长上升子序列+贪心)
- hdu 1069 Monkey and Banana 最长上升子序列。