洛谷P1439 最長公共子串行

2022-09-20 17:09:14 字數 806 閱讀 3345

傳送門:

最長公共子串行可以考慮轉化為最大上公升子串行。很容易想到用結構體儲存元素i(1<=i<=n)分別在兩個序列**現的位置,按其在第乙個序列**現的位置排序,對樣例便有:

x[i].a:1 2 3 4 5

x[i].b:3 2 1 4 5

此時i在a**現順序一定從前往後排列,求最大公共子串行長度只需找到b中最長的上公升子串行長度即可。

看下資料,n最大可以達到1e5,顯然普通dp的o(n2)求法會爆,便能想到二分。

1 #include2

#define ff(i,s,e) for(int i=s;i<=e;i++)

3using

namespace

std;

4 inline int

read()

7while(ch>='

0'&&ch<='9')

8return x*f;9}

10const

int m=100005;11

intn,f[m];

12struct

qwqx[m];

15bool

cmp(qwq x,qwq y)

18int find(int l,int r,int x)

24return

l;25}26

intmain()//

用x替換大於x的數,保證後面解最優 36}

37 printf("%d"

,len);

38return0;

39 }

洛谷 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 模板 最長公共子串行

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