rqnoj-217-拦截导弹-最长不上升子序列以及不上升子序列的个数
2013-10-30 09:44
218 查看
最长上升子序列的O(n*log(n))算法。
不上升子序列的个数等于最长上升子序列的长度。
不上升子序列的个数等于最长上升子序列的长度。
#include<string.h> #include<stdio.h> #include<iostream> #include<algorithm> using namespace std; #define INF 9999999 int dp[10001]; int num[10001]; int num2[10001]; int tops; int dos(int x) { if(tops==0) { tops++; return 0; } if(x<dp[0])return 0; if(x>dp[tops-1]) { tops++; return tops-1; } int mid,l,r; l=0;r=tops; mid=(l+r)/2; while(l<r) { if(dp[mid]>x)r=mid; if(dp[mid]<x)l=mid+1; if(dp[mid]==x)return mid; mid=(l+r)/2; } return mid; } int main() { int n,i; while(~scanf("%d",&n)) { tops=0; for(i=0;i<n;i++)scanf("%d",&num[i]),num2[i]=INF-num[i]; for(i=0;i<n;i++) { int mid=dos(num2[i]); dp[mid]=num2[i]; } cout<<tops; tops=0; for(i=0;i<n;i++) { int mid=dos(num[i]); dp[mid]=num[i]; } cout<<" "<<tops<<endl; } return 0; }
相关文章推荐
- rqnoj-217-拦截导弹-最长不上升子序列以及不上升子序列的个数
- 拦截导弹----RQNOJ_217----最长单调子序列
- Vijos P1303 导弹拦截【最长上升子序列+DP】
- 蓝桥杯 拦截导弹 动态规划(最长下降子序列+最长上升子序列)
- 拦截导弹 最长上升/下降子序列
- 3:拦截导弹(最长上升子序列)
- 导弹拦截(dp-最长不上升子序列)
- 拦截导弹(最长上升子序列,最长不上升子序列)
- 蓝桥杯算法训练拦截导弹【最长上升子序列 & 最长非下降子序列nlogn 和 n^2】
- hdu1257 拦截导弹 最长上升子序列
- 清橙 A1120 拦截导弹 -- 动态规划(最长上升子序列)
- noip1999 拦截导弹 (单调队列求解:最长下降子序列+最长上升子序列)
- ACM 588. [NOIP1999] 拦截导弹(dp+最长不上升子序列)
- 清橙 A1120 拦截导弹 -- 动态规划(最长上升子序列)
- 2016年团体程序设计天梯赛-决赛 L2-014. 列车调度 【导弹拦截系统-最长上升子序列nlogn求法】
- HDU 1257 最少拦截系统(最长上升子序列+贪心)
- 九度OJ 1112:拦截导弹 (DP、最长下降子序列)
- Longest Ordered Subsequence与最少拦截系统 DP+贪心(最长上升子序列及最少序列个数)
- HDU 1257 最少拦截系统(最长上升子序列+贪心)
- hdu 1257 最少拦截系统(最长上升子序列)