博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA 10635 Prince and Princess LCS转LIS
阅读量:5902 次
发布时间:2019-06-19

本文共 1660 字,大约阅读时间需要 5 分钟。

题意:求最长公共子序列

正常的算法O(n^2)不够快,但因为这题数据特殊,数组中的数各不相同,可以转化成求最大上升子序列

比如样例中A{1 7 5 4 8 3 9}, B{1 4 3 5 6 2 8 9},将数字重新映射编号map[ai]=i;

ai=map[ai];bi=map[bi];

变成A{1,2,3,4,5,6,7}  B{1,4,6,3,0,0,5,7} 问题便变成了求B的LIS可以在0(nlogn)求出

// #pragma comment(linker, "/STACK:1024000000,1024000000")#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long ll;typedef pair
pii;#define pb(a) push_back(a)#define INF 0x1f1f1f1f#define lson idx<<1,l,mid#define rson idx<<1|1,mid+1,rvoid debug(){#ifdef ONLINE_JUDGE#else freopen("d:\\in.txt","r",stdin); freopen("d:\\out1.txt","w",stdout);#endif}char getch(){ char ch; while((ch=getchar())!=EOF) { if(ch!=' '&&ch!='\n')return ch; } return EOF;}struct point{ int x,y,t; point() {} point (int a,int b,int e) { x=a; y=b; t=e; } bool operator < (point a) const { return t>a.t; }};int da[70000];int dp[70000];int lis(int n) //LIS的O(nlogn)算法{ int maxx=1; dp[1]=da[1]; for(int i=2;i<=n;i++) { if(da[i]>=dp[maxx]) { dp[++maxx]=da[i]; } else { int v=upper_bound(dp+1,dp+1+maxx,da[i])-dp; dp[v]=da[i]; } } return maxx;}int main(){ int t; scanf("%d",&t); for(int ca=1;ca<=t;ca++) { map
ma; int n,a,b; scanf("%d%d%d",&n,&a,&b); for(int i=1;i<=a+1;i++) { int x; scanf("%d",&x); ma[x]=i; } int k=0; for(int i=1;i<=b+1;i++) { int x; scanf("%d",&x); int v=ma[x]; if(v!=0)//0表示没出现,没必要加进去了 da[++k]=v; } int num=lis(k); printf("Case %d: %d\n",ca,num); } return 0;}
View Code

 

转载于:https://www.cnblogs.com/BMan/p/3249120.html

你可能感兴趣的文章
linux 将大文件分成小文件
查看>>
CCNA- 距离矢量路由协议学习
查看>>
企业实践用户邮箱导入/导出(第2部分)
查看>>
如何学习Linux命令-初级篇
查看>>
从Oracle Public Yum为Oracle Linux建立本地的Yum源
查看>>
在 SELECT 查询中使用表表达式
查看>>
静态路由和默认路由
查看>>
关于阿里开发者招聘节 |这5道笔试真题 你会吗!???
查看>>
C#的异常处理机制
查看>>
vsftp:500 OOPS: could not bind listening IPv4 sock
查看>>
Linux安装BTCPayServer并设置比特币BTC和Lightning支付网关
查看>>
Python 的 with 语句
查看>>
mysql安装,远程连接,以及修改密码
查看>>
Mybatis查询返回Map类型数据
查看>>
java的深拷贝与浅拷贝
查看>>
程序员如何提高工作效率
查看>>
promise
查看>>
将Java应用部署到SAP云平台neo环境的两种方式
查看>>
==与equal的区别
查看>>
数据批量导入Oracle数据库
查看>>