首先我们可以看到,普通的 O ( n 2 ) O(n^2) O(n2)的求法是不现实的,因为最大的数据量是 1 e 5 1e5 1e5

我们考虑这么一个变化,以样例为例子
3 − 2 − 1 − 4 − 5 3-2-1-4-5 3−2−1−4−5
我们将其映射为
p 1 : 1 − 2 − 3 − 4 − 5 p1:1-2-3-4-5 p1:1−2−3−4−5
并且用一个数组来记录这个映射

那么对于第二组数据
1 − 2 − 3 − 4 − 5 1-2-3-4-5 1−2−3−4−5,我们可以将其映射为
p 2 : 3 − 2 − 1 − 4 − 5 p2:3-2-1-4-5 p2:3−2−1−4−5

显然的,我们只需要求出p1和p2的lcs就可以了,我们发现p1是一个递增序列,因此我们只用在p2中求出最长递增序列的就可以了。

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+50;
int change[N];
int a[N];
int b[N];
int n;
int f[N];
int cnt;
signed main()
{cin>>n;for(int i=1;i<=n;i++){cin>>a[i];change[a[i]]=i;}for(int i=1;i<=n;i++){cin>>b[i];b[i]=change[b[i]];}f[++cnt]=b[1];for(int i=2;i<=n;i++){if (b[i]>f[cnt]){f[++cnt]=b[i];}else//<={int pos=lower_bound(f+1,f+1+cnt,b[i])-f;f[pos]=b[i];}}cout<<cnt;return 0;
}

最长公共子序列nlogn求法相关推荐

  1. 最长公共子序列(LCS)问题算法详解+例题(转换成LIS,优化为O(nlogn),看不懂你来打我)

    目录 最长公共子序列(LCS)问题 1.朴素做法 O(n2)O(n^2)O(n2) 2.转换成LIS优化O(nlogn)O(nlogn)O(nlogn) 3.P2758 编辑距离 最长公共子序列(LC ...

  2. 最长公共子序列(O(n)空间优化、O(nlogn)时间优化)

    普通算法 对于求最长公共子序列,最普遍的就是时间复杂度为O(n^2),空间复杂度为O(n*n)算法.重要的是,若要求出最长公共子序列是什么,则必须使用这一种算法,具体代码如下: int dp[maxn ...

  3. LCS(最长公共子序列)及其O(n)空间优化,O(nlogn)时间复杂度优化

    LCS(最长公共子序列)及其O(n)空间优化,O(nlogn)时间复杂度优化 n^2 的版本 int LCS_n_2(vector<char> &a,vector<char& ...

  4. 动态规划算法——最长公共子序列求法

    给定序列X={ X1,X2,....Xn }.Y={ Y1,Y2,...Ym }找出它们的最大子序列Z={ Z1,Z2,...Zk }比如:X={ A,B ,C,B,D,A,B }.Y={ B,D,C ...

  5. 模板 - 最长上升子序列与最长公共子序列

    整理的算法模板合集: ACM模板 目录 1.最长上升子序列(LIS) 1.1树状数组优化O(nlogn)O(nlogn)O(nlogn) 2.最长公共子序列(LCS) 2.1转换成LIS优化O(nlo ...

  6. LCS最长公共子序列和LIS最长上升子序列——例题剖析

    一.LCS最长公共子序列 最长公共子序列(LCS)问题算法详解+例题(转换成LIS,优化为O(nlogn),看不懂你来打我) longest comment subsequence 模板题 longe ...

  7. Algorithm:C++/python语言实现之求旋转数组最小值、求零子数组、求最长公共子序列和最长公共子串、求LCS与字符串编辑距离

    Algorithm:C++/python语言实现之求旋转数组最小值.求零子数组.求最长公共子序列和最长公共子串.求LCS与字符串编辑距离 目录 一.求旋转数组最小值 1.分析问题 2.解决思路 二.求 ...

  8. 程序员编程艺术第十一章:最长公共子序列(LCS)问题

    程序员编程艺术第十一章:最长公共子序列(LCS)问题 0.前言 程序员编程艺术系列重新开始创作了(前十章,请参考程序员编程艺术第一~十章集锦与总结).回顾之前的前十章,有些代码是值得商榷的,因当时的代 ...

  9. 【常见笔试面试算法题12续集四】动态规划算法案例分析4 LCS练习题练习题(最长公共子序列的长度)

    学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 给定两个字符串A和B,返回两个字符串的最长公共子序列的长度.例如,A ...

最新文章

  1. 汇编程序设计与计算机体系结构软件工程师教程笔记:内联汇编与宏
  2. 算法基础知识科普:8大搜索算法之红黑树(中)
  3. L3-015 球队“食物链”(dfs)
  4. 使用tesseract-ocr破解网站验证码
  5. 覆盖所有面试知识点,送大厂面经一份!
  6. 一天能学会的计算机技术
  7. 使用smo算法编写svm对CIFAR-10数据分类
  8. Linux常用命令3
  9. 本人账户登录计算机黑屏,电脑开机输入系统密码后就黑屏了,怎么办
  10. 企业软件,WEB和对于他们无限美好的遐想(第五日)--2014-3-14--IT日 + Struts 原理分析 (四)
  11. 解决windows10下总是很快自动黑屏进入睡眠问题
  12. list保存到scv
  13. larval框架数据表的填充
  14. 进程间通信:通俗理解信号量方式
  15. linux必须root权限才能mount,root执行/media可执行文件权限不够,chmod修改权限无效...
  16. mysql群发消息_百万级用户量的站内信群发数据库设计
  17. Android studio 仿微信朋友圈页面(简单版)
  18. 具有超能力的对话式机器人性能如何? #Chatsonic AI
  19. 神马 | 封杀这个公式,AI智商将为零
  20. 汇编语言----处理机控制指令及伪指令

热门文章

  1. 敏捷/持续集成/持续交付/DevOps基本理论全面解析
  2. thinkphp下的图片上传
  3. 2440+NAND Flash(K9F1208UOM)总结 收藏
  4. 手机拍摄短视频--硬件篇
  5. 金蝶EAS之编辑界面滚动条设置
  6. 对冲制裁风险:央行储备中的加密货币(1-4节)
  7. 中国神华25日网上申购 百亿大象逐一回顾
  8. 重定向和内部转发个人见解
  9. java 数组的排列组合_java数组排列组合问题汇总
  10. 操作系统概念 银行家算法