洛谷P1439 模板 最長公共子串行(二分)

2022-08-24 17:18:11 字數 918 閱讀 4079

給出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

給出的是1到n的乙個排列,所以每乙個數都會出現,而且只會出現一次。

如果用乙個陣列map把原陣列用的形式存下來,也就是說map[i]存i,i存a[i]的值,這樣陣列a就可以以單調遞增的方式存下來,那麼只要求出b的最長上公升子串行就可以和map中的數一一對應起來,轉化成求b的最長上公升子串行問題。

#include #include using namespace std;

#define n 100020

int a[n], b[n], maps[n], d[n];

int main()

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

scanf("%d", &b[i]);

d[1]=maps[b[1]];

len=1;

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

d[l]=maps[b[i]];

len=max(l, len);

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

return 0;

}

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

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

傳送門 這道題lcs。o n 2 暴力不僅會tle還會re。暴力的話就是dp的那個式子。這裡給出對數時間處理的 我們記錄陣列a的每個元素所在的下標,即把下標和對應的元素內容進行調換,得到pos。然後我們把pos陣列和b陣列進行操作,查詢b i 在pos中對應的位置 即在a中對應的位置 求出pos陣列...