acwing 896 最长上升子序列II

简介: acwing 896 最长上升子序列II

找不到页面 - AcWing

#include<iostream>
#include<cstring>
#include<algorithm>
 
using namespace std ;
typedef long long LL ;
const LL N = 1e5 +10 ;
LL n ; LL a[N] ;
LL q[N] ;//用于记录当长度为i时最后结尾的数
 
int main(){
  cin >> n ;
  for(int i = 1 ; i <= n ; i ++) cin >>a[i] ;
  int len = 0 ;
    //用二分来找到当前第i个数在q数组中的 第一个大于第i个数的位置 ;
    // 找到以后对len 和 q[r+1] 进行更新 
    //为什么可以更新呢?这里用到了贪心的思想,对于每一个最长上升子序列 一定是结尾越小越好 ,而我们二分找到的就是他的直接前驱
  for(int i = 1 ; i <= n ; i ++){
    int l = 0 ,r = len ;
    while(l<r){
      int mid = l+ r+1 >> 1 ;
      if(q[mid] < a[i]) l = mid ;
      else r = mid - 1 ;
    }
    len = max(len , r+1) ;
    q[r+1] = a[i] ;
  }
  cout << len << endl ;
  return 0 ;
}
目录
相关文章
【动态规划刷题 15】最长定差子序列&& 最长的斐波那契子序列的长度
【动态规划刷题 15】最长定差子序列&& 最长的斐波那契子序列的长度
|
3天前
acwing 895 最长上升子序列1
acwing 895 最长上升子序列1
12 3
|
3天前
acwing 897 最长公共子序列
acwing 897 最长公共子序列
8 0
acwing 897 最长公共子序列
|
2天前
acwing 1016 最大上升子序列和
acwing 1016 最大上升子序列和
6 0
|
5月前
leetcode-300:最长递增子序列
leetcode-300:最长递增子序列
39 0
Acwing 3692. 最长连续公共子序列
Acwing 3692. 最长连续公共子序列
59 0
|
人工智能
线性DP——AcWing 898. 数字三角形、AcWing 895. 最长上升子序列
线性DP——AcWing 898. 数字三角形、AcWing 895. 最长上升子序列
76 0
|
算法
Leecode 300. 最长上升子序列
Leecode 300. 最长上升子序列
61 0
leetcode 300 最长递增子序列
leetcode 300 最长递增子序列
76 0
leetcode 300 最长递增子序列
|
算法 Python
LeetCode 300. 最长递增子序列
最长递增子序列 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。
121 0