P1439 模板 最長公共子串行

2021-10-09 20:20:59 字數 1726 閱讀 5912

p1439 【模板】最長公共子串行

這個題目我是沒想到反正我感覺十分的神奇先寫一下我在洛谷題解區看見的乙個很好理解的題解

對於樣例 3 2 1 4 5

1 2 3 4 5

我們可以把第乙個陣列編號位a b c d e

。。那麼第二個陣列就變成了c b a d e

現在對於第二個陣列的最長上公升子串行就是答案,因為首先每個數隻出現一次,其次相對於abcde來說其就是一直上公升的,所以對於第二個陣列來說其上公升的序列必然是第乙個的子串行,所以說答案就是最長上公升子串行。

**如下

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

#define ms(a,b) memset(a,b,sizeof(a))

#define lowbit(x) x & -x

#define fi first

#define ull unsigned long long

#define se second

#define lson (rt<<1)

#define rson (rt<<1|1)

#define endl "\n"

#define bug cout<<"----acac----"<#define ios ios::sync_with_stdio(false), cin.tie(0),cout.tie(0)

using

namespace std;

const

int maxn =

1e5+10;

const

int maxm =

1.5e5+50

;const

double eps =

1e-10

;const

double inf =

0x3f3f3f3f

;const ll lnf =

0x3f3f3f3f3f3f3f3f

;const

int mod =

1e4+7;

const

double pi =

3.141592653589

;struct node

e[maxn]

;bool

cmp(node a, node b)

int dp[maxn]

;map<

int,

int>p;

intmain()

for(

int i =

1; i <= n; i++

)//sort(e + 1, e + 1 + n, cmp);

int cnt =0;

for(

int i =

1; i <= n; i++

)//求上公升子串行

else

}printf

("%d\n"

, cnt)

;return0;

}

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 對於100 的資料,n 1...

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

P1439 模板 最長公共子串行

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