【最长上升子序列】51 nod 最长单增子序列
2017-08-07 21:00
141 查看
输入
第1行:1个数N,N为序列的长度(2 <= N <= 50000)
第2 - N + 1行:每行1个数,对应序列的元素(-10^9 <= S[i] <= 10^9)
输出
输出最长递增子序列的长度。
输入示例
8
5
1
6
8
2
4
5
10
输出示例
5
思路:
平时的方法,O(n * n)会超时,得用二分,我用的是STL的lower_bound
![](https://img-blog.csdn.net/20170807205811745?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmJiYnN3YnE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
第1行:1个数N,N为序列的长度(2 <= N <= 50000)
第2 - N + 1行:每行1个数,对应序列的元素(-10^9 <= S[i] <= 10^9)
输出
输出最长递增子序列的长度。
输入示例
8
5
1
6
8
2
4
5
10
输出示例
5
思路:
平时的方法,O(n * n)会超时,得用二分,我用的是STL的lower_bound
#include<bits/stdc++.h> using namespace std; #define inf 0x3f3f3f3f int dp[50055]; int main() { int n, num; while(~scanf("%d", &n)) { memset(dp, inf, sizeof(dp));//初始化为无穷大, //因为dp数组是从小到大存数的。 for(int i = 0; i < n; i++) { scanf("%d", &num); *lower_bound(dp, dp + n, num) = num;//找到大于等于num的第一个位置 } printf("%d\n", lower_bound(dp, dp + n, inf) - dp); } }
相关文章推荐
- 51 nod 1376 最长递增子序列的数量(二维偏序cdq)
- 51 Nod 1134 最长递增子序列 LIS NlogN 写法
- hdoj--1087--Super Jumping! Jumping! Jumping!(最长上升序列)
- 最长上升序列模板 LIS
- 最长上升子序列、最长下降子序列的DP算法由O(n^2)到O(nlogn)算法实现及其优化
- OpenJudge-Noi 2000 最长公共子上升序列
- Longest Ordered Subsequence 【poj-2533】【动态规划-最长上升子序列】
- 最长上升子序列(LIS)问题
- 动态规划:最长上升子序列(二分算法 nlogn)
- zoj 2136 Longest Ordered Subsequence 最长上升子序列 新思路
- LIS 求最长上升子序列长度
- HDOJ 题目1160 FatMouse's Speed(最长上升子序列,输出路径)
- [CODEVS] 3955 最长严格上升子序列(加强版)
- 几种线性DP(最长上升子序列,最长公共子序列等)
- UVA-10635 J [最长上升子序列]
- POJ 1631 Bridging signals(最长上升子序列 n*logn && POJ 3903)
- LIS 最长上升序列
- 最长上升子序列及其实际问题小结
- 最长上升子序列 LIS
- 病毒(LICS 最长上升公共子序列)