傳送門
給出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...