找出两个序列的最长公共子序列

因为每个序列中每个数只出现一次
所以可以先记录每个数字在第一个序列中出现的位置
再把第二个序列的数字换成这个数字在第一个序列中出现的位置
这样求一个最长上升子序列就是答案

#include <iostream>
#include <algorithm>
#include <sstream>
#include <string>
#include <queue>
#include <cstdio>
#include <map>
#include <set>
#include <utility>
#include <stack>
#include <cstring>
#include <cmath>
#include <vector>
#include <ctime>
#include <bitset>
using namespace std;
#define pb push_back
#define sd(n) scanf("%d",&n)
#define sdd(n,m) scanf("%d%d",&n,&m)
#define sddd(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define sld(n) scanf("%lld",&n)
#define sldd(n,m) scanf("%lld%lld",&n,&m)
#define slddd(n,m,k) scanf("%lld%lld%lld",&n,&m,&k)
#define sf(n) scanf("%lf",&n)
#define sff(n,m) scanf("%lf%lf",&n,&m)
#define sfff(n,m,k) scanf("%lf%lf%lf",&n,&m,&k)
#define ss(str) scanf("%s",str)
#define ansn() printf("%d\n",ans)
#define lansn() printf("%lld\n",ans)
#define r0(i,n) for(int i=0;i<(n);++i)
#define r1(i,e) for(int i=1;i<=e;++i)
#define rn(i,e) for(int i=e;i>=1;--i)
#define mst(abc,bca) memset(abc,bca,sizeof abc)
#define lowbit(a) (a&(-a))
#define all(a) a.begin(),a.end()
#define pii pair<int,int>
#define pll pair<long long,long long>
#define mp(aa,bb) make_pair(aa,bb)
#define lrt rt<<1
#define rrt rt<<1|1
#define X first
#define Y second
#define PI (acos(-1.0))
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
//const ll mod = 1000000007 ;
const double eps=1e-9;
const int inf=0x3f3f3f3f;
//const ll infl = 100000000000000000;//1e17
const int maxn=  1e5+20;
const int maxm = 1e5+20;
//muv[i]=(p-(p/i))*muv[p%i]%p;
int in(int &ret) {char c;int sgn ;if(c=getchar(),c==EOF)return -1;while(c!='-'&&(c<'0'||c>'9'))c=getchar();sgn = (c=='-')?-1:1;ret = (c=='-')?0:(c-'0');while(c=getchar(),c>='0'&&c<='9')ret = ret*10+(c-'0');ret *=sgn;return 1;
}int a[maxn];
int b[maxn];
int c[maxn];
int main() {
#ifdef LOCALfreopen("input.txt","r",stdin);freopen("output.txt","w",stdout);
#endif // LOCALint t;sd(t);r1(cas,t) {printf("Case %d: ",cas);int n,p,q;sddd(n,p,q);int sz = n*n;for(int i=1; i<=sz; ++i)a[i] = inf;for(int i=1; i<=p+1; ++i) {int x;sd(x);a[x] = i;}for(int i=1; i<=q+1; ++i) {int x;sd(x);b[i] = a[x];}int len = 1;c[1] = b[1];
//        for(int i=1; i<=q+1; i++)printf("%d%c",b[i]," \n"[i==q+1]);for(int i=2; i<=q+1; ++i) {if(b[i]==inf)continue;if(b[i]>c[len])c[++len] = b[i];else {int l = 1 , r = len;int pos = 0;while(l<=r) {int mid = (l+r)>>1;if(b[i]<c[mid])r = mid - 1, pos = mid;else l = mid + 1;}c[pos] = b[i];}}
//        for(int i=1; i<=len; i++)printf("%d%c",c[i]," \n"[i==len]);int ans = len;ansn();}return 0;
}

Prince and Princess UVA - 10635相关推荐

  1. UVA 10635 王子和公主

    UVA 10635 [题目描述]:王子和公主 一个王子和公主在n*n的格子中行走,这些格子是有1....n^2的编号的.现在给定p+1个数,再给定q+1个数,公主和王子可以选择其中某些格子行走,求他们 ...

  2. HDU 4685 Prince and Princess(二分匹配加点建图+强连通分量)

    题目链接 Problem Description There are n princes and m princesses. Princess can marry any prince. But pr ...

  3. H - Prince and Princess 计蒜客 - 42402

    H - Prince and Princess 计蒜客 - 42402 题意: 你现在要寻找公主,有三种人,第一种是说真话的人(至少为1,因为公主是说真话的人),第二种人是只会说假话的,第三种是胡说八 ...

  4. HDU4685:Prince and Princess(二分图匹配+tarjan)

    Prince and Princess Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Othe ...

  5. uva10635 Prince and Princess LCS 变 lIS

    // uva10635 Prince and Princess LCS 变 lIS // 本意求LCS,但是规模有60000多,复杂度肯定不够 // 注意如果俩个序列的值的范围相同,那么可以在一个 / ...

  6. Prince and Princess问题解决

    摘要 这是突然看到的一个非常有意思的题,是ACM-ICPC的原题,在这里稍微做一些分析,希望对大家有帮助. Prince and Princess 题面 王子m和公主Hff相爱,想要娶公主.虽然公主非 ...

  7. UVA 10635——Prince and Princess

    题意:给定两个长度为p+1和q+1的序列,求两个序列的LCS. 思路:如果直接使用朴素的LCS算法则O(pq)会超时,可以把A中出现的元素编码,然后映射到B(只保留AB都存在的元素),这样就转化为求B ...

  8. uva 10635 Prince and Princess(LCS成问题LIS问题O(nlogn))

    标题效果:有两个长度p+1和q+1该序列.的各种元素的每个序列不是相互同.并1~n^2之间的整数.个序列的第一个元素均为1. 求出A和B的最长公共子序列长度. 分析:本题是LCS问题,可是p*q< ...

  9. UVa 10635 (LIS+二分) Prince and Princess

    题目的本意是求LCS,但由于每个序列的元素各不相同,所以将A序列重新编号{1,2,,,p+1},将B序列重新编号,分别为B中的元素在A中对应出现的位置(没有的话就是0). 在样例中就是A = {1 7 ...

最新文章

  1. Cpp / 拷贝构造函数的参数为什么必须使用引用类型
  2. 最优化方法:梯度下降法、SGD
  3. 今年的假期挺长的~~~
  4. android 揭示动画_如何使用意图揭示函数名称使代码更好
  5. no typehandler found for property XXXX 解决
  6. NULL和空字符的区别
  7. 30 岁成 AI 顶尖科学家,这位阿里副总裁厉害了
  8. 冬小麦病虫害的高光谱识别方法研究
  9. AcWing 2019. 拖拉机(双端BFS)
  10. Java static变量
  11. 网络舆情监测系统学习笔记——GIT的…
  12. RootKit检测工具
  13. 3D游戏编程4--打飞碟
  14. matlab fprintf和disp,matlab中 fprintf 和disp的用法
  15. 【lphtw】第三弹笔记ex24-ex35
  16. python一张纸折叠到珠峰高度_一张普通纸折叠27次后会是什么样?专家:厚度超过珠穆朗玛峰...
  17. 【大脑】----如何增加大脑记忆?
  18. 想再考一个教师资格证,相同的科目需要重考笔试吗?
  19. 如何检查MacBook 电池的循环使用次数及健康度?电池续航的方法
  20. pan图像全色图像_HTML5图像效果–棕褐色

热门文章

  1. MP-2平面烟雾气体传感器介绍
  2. 【精】EOS智能合约:system系统合约源码分析
  3. SourceTree安装跳过注册
  4. 合并两个递增的有序数组
  5. Excel保护工作表了为什么就筛选不了了
  6. CSS - 移动端布局(一)关键的前置知识
  7. 各种图论模型及其解答
  8. CSDN的markdown的KaTex数学公式
  9. 互联网寒冬下如何过冬?厚积薄发还是直接开摆?我选这个
  10. spring 配置相关