N个编号为1-n的球,每个球都有唯一的编号。这些球被排成两种序列,分别为A、B序列,现在需要重新寻找一个球的序列l,对于这个子序列l中任意的两个球,要求j,k(j<k),都要求满足lj在A中位置比lk在A中位置靠前,却lj在B中位置比lk在B中位置靠前,请你计算这个子序列l的最大长度。

输入:

第一行一个整数,表示N。

第二行N个整数,表示A序列。

第三行N个整数,表示B序列。

样例输入

5

1 2 4 3 5

5 2 3 4 1

样例输出

2

样例说明

L可以是{2,3},也可以是{2,4}

数据范围:

40% N<=5000

100% N<=50000

/*
一看题目,没多想就以为是最长公共子序列,无奈n^2做法不给力,40分
经某大神提醒,不用最长公共子序列,因为第二个数列中的数和第一个中的数一样的,所以先预处理处第二个数列中的数在第一个数列中的位置,然后跑最长上升子序列。
*/
#include<cstdio>
#include<iostream>
#define M 50010
using namespace std;
int a[M],b[M],num[M],c[M],len,n;
int main()
{
//freopen("jh.in","r",stdin);
freopen("formation.in","r",stdin);
freopen("formation.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&a[i]),num[a[i]]=i;
for(int i=;i<=n;i++)
{
int x;
scanf("%d",&x);
b[i]=num[x];
}
c[++len]=b[];
for(int i=;i<=n;i++)
{
int pos=lower_bound(c+,c+len+,b[i])-c;
if(pos>len)++len;
c[pos]=b[i];
}
printf("%d",len);
return ;
}

最新文章

  1. stringstream操纵string小总结
  2. 重拾C,一天一点点_11
  3. Fragment 整个生命周期
  4. user is not mapped
  5. c#中跨线程调用windows窗体控件
  6. Android中SharedPreferences函数具体解释
  7. Qt5.5.1和Qt5.3.2编译OCI驱动教程及验证方法
  8. Spring,SpringMvc配置常见的坑,注解的使用注意事项,applicationContext.xml和spring.mvc.xml配置注意事项,spring中的事务失效,事务不回滚原因
  9. python截图
  10. java 网络编程(五)Socket多线程上传文件
  11. 关于Eclipse无法显示package Explorer 内容的解决方法
  12. maven 下载 源码和javadoc命令(转)
  13. 使用curl进行s3服务操作
  14. Building a Space Station---poj2031(最小生成树)
  15. kbmMWEncodeEscapes 中汉字编码的问题及解决办法
  16. 36 The Benefits of Marriage 结婚的益处
  17. Servlet 思维导图
  18. [转]Git 撤销操作
  19. 相同内容 yaml 与 json 格式对比
  20. ZT 骆家辉宣布辞职 他给中国带来什么留下什么?

热门文章

  1. ::before和::after伪元素的使用
  2. struts2标签---备忘录
  3. join()和fromkeys()的用法与注意事项
  4. BZOJ 1208 set
  5. Codeforces 771C
  6. A* 寻路算法[转载]
  7. drupal-使用hook_preprocess_field在paragraph的accordion中添加自定义数据
  8. PHP开发之旅-表单验证
  9. JS高级——静态成员与实例成员
  10. java攻城狮之路--复习JDBC(PrepareStatement)