最长公共子序列nlogn求法
首先我们可以看到,普通的 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求法相关推荐
- 最长公共子序列(LCS)问题算法详解+例题(转换成LIS,优化为O(nlogn),看不懂你来打我)
目录 最长公共子序列(LCS)问题 1.朴素做法 O(n2)O(n^2)O(n2) 2.转换成LIS优化O(nlogn)O(nlogn)O(nlogn) 3.P2758 编辑距离 最长公共子序列(LC ...
- 最长公共子序列(O(n)空间优化、O(nlogn)时间优化)
普通算法 对于求最长公共子序列,最普遍的就是时间复杂度为O(n^2),空间复杂度为O(n*n)算法.重要的是,若要求出最长公共子序列是什么,则必须使用这一种算法,具体代码如下: int dp[maxn ...
- LCS(最长公共子序列)及其O(n)空间优化,O(nlogn)时间复杂度优化
LCS(最长公共子序列)及其O(n)空间优化,O(nlogn)时间复杂度优化 n^2 的版本 int LCS_n_2(vector<char> &a,vector<char& ...
- 动态规划算法——最长公共子序列求法
给定序列X={ X1,X2,....Xn }.Y={ Y1,Y2,...Ym }找出它们的最大子序列Z={ Z1,Z2,...Zk }比如:X={ A,B ,C,B,D,A,B }.Y={ B,D,C ...
- 模板 - 最长上升子序列与最长公共子序列
整理的算法模板合集: ACM模板 目录 1.最长上升子序列(LIS) 1.1树状数组优化O(nlogn)O(nlogn)O(nlogn) 2.最长公共子序列(LCS) 2.1转换成LIS优化O(nlo ...
- LCS最长公共子序列和LIS最长上升子序列——例题剖析
一.LCS最长公共子序列 最长公共子序列(LCS)问题算法详解+例题(转换成LIS,优化为O(nlogn),看不懂你来打我) longest comment subsequence 模板题 longe ...
- Algorithm:C++/python语言实现之求旋转数组最小值、求零子数组、求最长公共子序列和最长公共子串、求LCS与字符串编辑距离
Algorithm:C++/python语言实现之求旋转数组最小值.求零子数组.求最长公共子序列和最长公共子串.求LCS与字符串编辑距离 目录 一.求旋转数组最小值 1.分析问题 2.解决思路 二.求 ...
- 程序员编程艺术第十一章:最长公共子序列(LCS)问题
程序员编程艺术第十一章:最长公共子序列(LCS)问题 0.前言 程序员编程艺术系列重新开始创作了(前十章,请参考程序员编程艺术第一~十章集锦与总结).回顾之前的前十章,有些代码是值得商榷的,因当时的代 ...
- 【常见笔试面试算法题12续集四】动态规划算法案例分析4 LCS练习题练习题(最长公共子序列的长度)
学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 给定两个字符串A和B,返回两个字符串的最长公共子序列的长度.例如,A ...
最新文章
- 汇编程序设计与计算机体系结构软件工程师教程笔记:内联汇编与宏
- 算法基础知识科普:8大搜索算法之红黑树(中)
- L3-015 球队“食物链”(dfs)
- 使用tesseract-ocr破解网站验证码
- 覆盖所有面试知识点,送大厂面经一份!
- 一天能学会的计算机技术
- 使用smo算法编写svm对CIFAR-10数据分类
- Linux常用命令3
- 本人账户登录计算机黑屏,电脑开机输入系统密码后就黑屏了,怎么办
- 企业软件,WEB和对于他们无限美好的遐想(第五日)--2014-3-14--IT日 + Struts 原理分析 (四)
- 解决windows10下总是很快自动黑屏进入睡眠问题
- list保存到scv
- larval框架数据表的填充
- 进程间通信:通俗理解信号量方式
- linux必须root权限才能mount,root执行/media可执行文件权限不够,chmod修改权限无效...
- mysql群发消息_百万级用户量的站内信群发数据库设计
- Android studio 仿微信朋友圈页面(简单版)
- 具有超能力的对话式机器人性能如何? #Chatsonic AI
- 神马 | 封杀这个公式,AI智商将为零
- 汇编语言----处理机控制指令及伪指令