xjb 洛谷 P1439 排列LCS問題

2021-08-02 20:50:06 字數 865 閱讀 3900

這個一看就是n*n的暴力嘛,但是n有點大…

因為是兩個排列,換句話說沒有重複的數字;

那我們可以轉化一下

比如樣例

5

3 2 1 4 5

1 2 3 4 5

我們把下面一行的值變成上面一行的位置

3 2 1 4 5

那麼直接最長上公升子串行就好了

為什麼呢?

比如第二行第乙個數1

如果我們選了1,那麼後面是不是只可以選擇在第一行1後面的數了;

就是這個道理;

然後對於最長上公升子串行我們有乙個基於單調棧和二分的演算法n*logn

就是維護乙個遞增的棧;

當前我們的值是x;

如果x>棧頂,那麼直接加入;

不然我們就二分找到第乙個大於x的數,直接替換;

因為x之後的數,全可以接在x的後面,所以直接替換就可以了;

最後答案就是棧的高度;

但是方案並不是棧的元素;

不好意思,這種方法不可以記錄方案的;

#include

#define ll long long

using

namespace

std;

const

int n=1e5+5;

int f[n],a[n],v[n],top;

int n,m,x,ans;

int er(int x)

return ans;

}int main()

printf("%d",top);

}

洛谷 P1439 排列LCS問題

題目描述 給出1 n的兩個排列p1和p2,求它們的最長公共子串行。輸入輸出格式 輸入格式 第一行是乙個數n,接下來兩行,每行為n個數,為自然數1 n的乙個排列。輸出格式 乙個數,即最長公共子串行的長度 輸入輸出樣例 輸入樣例 1 5 3 2 1 4 5 1 2 3 4 5 輸出樣例 1 說明 資料規...

洛谷P1439 最長公共子串行(LCS問題)

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

最長公共子串行問題(LCS) 洛谷 P1439

題目 p1439 模板 最長公共子串行 洛谷 電腦科學教育新生態 luogu.com.cn 關於lcs問題,可以通過離散化轉換為lis問題,於是就可以使用stl二分的方法o nlogn 解決lcs問題!先將a陣列與乙個遞增的數列1,2,3.n兩兩對應 t陣列 再把b陣列中每個數在a陣列中的位置表示成...