关于特殊的LCS问题的优化
来源:互联网 发布:阿里云 网站备案 编辑:程序博客网 时间:2024/06/05 03:27
首先是一道比较简单的例题:传送门
题目的提示很明显,元素无重复,然后看看样例,手玩一下,就会发现选的元素在上面对应着上升的位置,而且这还是两个排列,那么就可以建立一个从排列A到排列B的映射,然后就可以转化成为LIS问题了,这个问题是有O(nlogn)的解法的。
代码:
#include<cstdio>using namespace std;int n;int a[100001];int b[100001];int f[100001];int q[100001];int mp[100001];int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); mp[a[i]]=i; } for(int i=1;i<=n;i++){ int x; scanf("%d",&x); b[i]=mp[x]; } int ans=0; f[1]=1; for(int i=2;i<=n;i++){ f[i]=lower_bound(q+1,q+ans+1,b[i])-q; if(!q[f[i]]){ q[f[i]]=b[i]; } else{ q[f[i]]=min(q[f[i]],b[i]); } ans=max(ans,f[i]); } if(ans==99999)ans++; printf("%d",ans); return 0;}
传送门
然而对于这个题呢?是不是无法解决呢?
当然不是。
仔细想想可以发现,只要把数据离散化一下,就还是上面那个排列LCS问题了。
关于如何离散化,我们当然可以用map,但是由于map效率太低,我们可以采用一种效率更高的数据结构:unordered_map,这是STL实现的链式hash表,但是只在C++11标准中才有,noip中貌似可以用。
要调用这个数据结构,就要include这个头文件: < tr1/unordered_map >,然后调用一个命名空间:using namespace std::tr1
接下来就是照着上面的做就好了,没什么变化。
代码:(620ms)
#include<cstdio>#include<tr1/unordered_map>using namespace std;using namespace std::tr1;inline int read(){ int x=0;char ch=' '; while(ch<'0'||ch>'9')ch=getchar(); while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar(); return x;}int n,m,a,mx;int q[300001];unordered_map<int,int> mp;int main(){ n=read();m=read(); for(int i=1;i<=n;i++){ mp[read()]=i; } for(int i=1;i<=m;i++){ a=mp[read()]; if(a==0)continue; if(a>q[mx])q[++mx]=a; else *lower_bound(q+1,q+mx+1,a)=a; } printf("%d",mx); return 0;}
阅读全文
0 0
- 关于特殊的LCS问题的优化
- 写个关于lcs模板的问题
- 关于LCS的构造
- orz 逆天的lcs 对经典的lcs问题优化
- LCS 问题的解决办法
- 【codevs 1862】LCS问题+LCS的计数
- 关于无法显示特殊汉字的问题
- 关于特殊字符转码的问题
- 关于LCS的一个证明
- LCS问题的另一种解法
- 关于SQL优化的问题
- 关于dsp的优化问题。
- 关于错别字的优化问题
- 关于dp优化的问题
- 一个关于特殊的排序问题的研究
- 关于activiti的判断点的特殊问题
- java开发webservcie时关于特殊字符的问题
- 关于OFFICE/WORD里无法插入特殊字符的问题
- centos7更换yum源为163
- Android百度地图(三):百度地图画运动轨迹及图层点击事件处理
- 数字图像处理成长之路4: C语言与离散傅立叶变换(DFT)
- 最简单的一个html页面
- web安全概述——漏洞到获取shell
- 关于特殊的LCS问题的优化
- 笔记之git工作使用
- Redis之SDS
- Python--os模块--shutil
- [linux命令] grep使用梳理
- 求二维数组每行元素之和
- Nginx安装步骤、启动和停止
- [Leetcode] #268 Missing Number
- P1059 明明的随机数