洛谷P1439 最長公共子串行(LCS問題)

2021-09-07 15:23:25 字數 957 閱讀 9650

給出1-n的兩個排列p1和p2,求它們的最長公共子串行。

輸入格式:

第一行是乙個數n,

接下來兩行,每行為n個數,為自然數1-n的乙個排列。

輸出格式:

乙個數,即最長公共子串行的長度

輸入樣例#1: 

複製

5 

3 2 1 4 5

1 2 3 4 5

輸出樣例#1: 

複製

3

【資料規模】

對於50%的資料,n≤1000

對於100%的資料,n≤100000

首先把第乙個序列裡面的數在第二個序列裡面對應hash一下

然後就轉化成了求最長上公升子串行的問題

對於這種問題,可以用二分查詢處理

每次找出大於等於他的第乙個位置

替換即可

1 #include2 #include3 #include4

using

namespace

std;

5const

int maxn=100001

;6 inline int

read()710

while(c>='

0'&&c<='

9') x=x*10+c-48,c=getchar();return x*f;11}

12int

a[maxn];

13int

b[maxn];

14int ans[maxn],tot=0;15

intmain()

1622

for(int i=1;i<=n;i++)

23

25for(int i=1;i<=n;i++)

2631 printf("%d"

,tot);

32return0;

33 }

洛谷 P1439 最長公共子串行

傳送門 給出1 n的兩個排列p1和p2,求它們的最長公共子串行。輸入格式 第一行是乙個數n,接下來兩行,每行為n個數,為自然數1 n的乙個排列。輸出格式 乙個數,即最長公共子串行的長度 輸入樣例 5 3 2 1 4 5 1 2 3 4 5 輸出樣例 3 資料規模 對於50 的資料,n 1000 對於...

洛谷P1439 最長公共子串行

傳送門 最長公共子串行可以考慮轉化為最大上公升子串行。很容易想到用結構體儲存元素i 1 i n 分別在兩個序列 現的位置,按其在第乙個序列 現的位置排序,對樣例便有 x i a 1 2 3 4 5 x i b 3 2 1 4 5 此時i在a 現順序一定從前往後排列,求最大公共子串行長度只需找到b中最...

洛谷 P1439 模板 最長公共子串行

lis lcs 對映 題目描述 給出1 n的兩個排列p1和p2,求它們的最長公共子串行。輸入輸出格式 輸入格式 第一行是乙個數n,接下來兩行,每行為n個數,為自然數1 n的乙個排列。輸出格式 乙個數,即最長公共子串行的長度 輸入輸出樣例 輸入樣例 1 5 3 2 1 4 5 1 2 3 4 5 輸出...