洛谷 P1439 最長公共子串行

2021-08-17 07:59:46 字數 697 閱讀 3037

傳送門

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

輸入格式:

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

輸出格式:

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

輸入樣例:

5 3 2 1 4 5

1 2 3 4 5

輸出樣例:

3【資料規模】

對於50%的資料,n≤1000

對於100%的資料,n≤100000

用 二分法求lis求最長公共子串行(lcs)。

我們定義a[i]為p2排列中第i個數在p1排列中的位置。

由於最長公共子串行是向後比對的,則如果a[i]是遞增的,就說明這一段在p1和p2中的位置都偏後,可以考慮納入lcs。

則問題就變為求a陣列的lis。

#include#includeint a[100010],b[100010],f[100010];

int n;

int main()

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

int len=1;

f[1]=a[1];

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

if(f[l]>a[i]) f[l]=a[i];

} }printf("%d",len);

}

洛谷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 輸出...

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

給出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 對於1...