【LCS转LIS】大地的秘密 rqnoj242

来源:互联网 发布:阿里云域名301重定向 编辑:程序博客网 时间:2024/04/28 03:52

题目:大地的秘密

问题编号:242

题目描述

题目背景
在你的帮助之下,三仙兽终于弄清楚了到北京的道路,于是他们收拾一下行装,出发了。

第一站他们要经过被成为“米不亚亚亚亚尔”的神秘森林,由于有蓬絮这位走迷宫的高手打头阵,前进的道路变平坦了很多。但当他们来到这片森林的核心地带时,还是遇到了一点点小麻烦……

题目叙述
现在他们位于神秘森林的核心部位,面前有两条主要的大道,不用说,一条通向光明,一条通向黑暗。大家当然想奔向光明,远离黑暗,可是蓬絮研究了半个时辰也研究不出个所以然。

倒是细心的花楹发现了线索,她在地上搜寻时,发现了遗落在草丛里的一张纸,纸上如是写道:

致想要寻找出口的人们:
  这里必须你们真正了解大地的运行规律,才能破解难关。
  现在,你们只需要拿这这张纸,大喊一声:“哇呱呱呱呱呱呱呱呱呱呱~”,你们前方的地面上就会出现很多的木偶士兵,他们外貌各异。你们必须把他们排布成东边一棵松树上刻纹中写出的阵列,正确的出口才会显露出来。
  正确的答案就在你们面前,只看你们能不能把握咯。

      ——米不亚亚亚亚尔之主:巴罗罗罗罗列吉

没办法,虽然这张破破烂烂发着臭气的纸看上去不像真的,死马当作活马医,三人还是照做了。没想到咒语刚说完,前方“嗡~”的一声起了巨大的烟雾。等到烟消云散,三兽定睛一看,地上果然出现了数不清的人偶。

他们开始相信这一张纸的真实性了,动作快的勇气赶忙找到附近的一棵松树。果然,上面也刻着数不请的人偶图案。

现在的任务就是如何调整木偶的顺序了。整个木偶群可以看成一列排布的,所有的 n 个木偶不尽相同,编号为 1-n。由于仙兽功力有限,每次施法只能把一个木偶移动到另两个木偶之间(可以移到队头和队尾)。

经过三个时辰的仔细研究,勇气已经把所有的木偶都正确编号完毕(勇气:累死俺也~她们两个都不干事的……)。现在他需要你告诉他,要完成调整最少需要移动多少次木偶,这样来给他个心里准备……

数据范围
对于 60% 的数据,n <= 1000
对于 100% 的数据,n <= 100000

输入格式

三行,第一行一个整数 n,表示有 n 个木偶。
第二行,n 个整数(1-n),表示初始时木偶的排布。
第三行,n 个整数(1-n),表示目标木偶的排布。

输出格式

一行,一个整数,表示最少移动次数。


样例解释
先把 1 移动到 10 后面,后面 2-9 每个数移动到 10 和 1 中合适的位置,则 10 不需要移动,共移动 9 次。

样例输入

10
1 2 3 4 5 6 7 8 9 10
10 9 8 7 6 5 4 3 2 1

样例输出

9

 

 

 

 

这一题最直观的的思路就是求出最长公共子序列,然后用N减去答案即可

 

但是写代码的过程中我们可以发现,空间上 [ 100000 ][ 100000 ] 是开不下的

并且N*N的时间复杂度也是不行的

 

一个经典的做法就是LCS转LIS,也就是把最长公共子序列转换成求最长上升子序列

一个例子,求最长公共子序列

1 2 5 3 4        ①
5 4 3 2 1        ②

我们可以把②中的数改了,改成在①中的位置,也就是 3 5 4 2 1 ,然后我们求这个序列的最长上升子序列即可

 

这一题就可以用同样的方法,以O(N)的效率转化,然后O(N*logN)的效率求LIS

 

C++ Code

#include<cstdio>#define max(a,b) ((a)>(b)?(a):(b))const int N=100000+10;int n;int a[N],b[N];int h[N];int c[N],len=0;int find(int x){int l=1,r=len,mid;while(l<=r){mid=(l+r)>>1;if(x>c[mid]) l=mid+1;else r=mid-1;}return l;}int main(){freopen("rqn242.in","r",stdin);freopen("rqn242.out","w",stdout);scanf("%d",&n);for(int i=1;i<=n;i++) {scanf("%d",&a[i]);h[a[i]]=i;}for(int i=1;i<=n;i++) {scanf("%d",&b[i]);b[i]=h[b[i]];}for(int i=1;i<=n;i++){int k=find(b[i]); c[k]=b[i];len=max(len,k);}printf("%d\n",n-len);return 0;}


 

 

  

原创粉丝点击