loj 6169 相似序列

2021-08-02 23:01:25 字數 826 閱讀 6178

最近口胡了乙個隨機的idea,結果在loj上連出3道類似的題。。

我的思路是這樣的:給每個數乙個隨機權值,如果兩個序列的數的隨機權值異或和相等可以認為這兩個序列排序後相同。考慮主席樹,對於兩個區間l~r的數,二分乙個將那對不同的數分開的數值,然後用區間最大(小)查詢就能得到那兩個不同的數,再判斷一下即可。

至於那個隨機為什麼對,只要考慮如果兩個序列相等,異或和必定相等,否則最後的異或和是隨機的,有2^-64相同,(1-2^-64)^(nlogn)的概率正確。//大概算出來是這個東西:

upd:被hack了,請把異或和改為和。

#include#define ll long long

#define n 100005

#define m 100000

using namespace std;

int t,n,q,a[n],rt[n];

int ls[2000005],rs[2000005],cnt,sz[2000005];

ll v[2000005],b[n];

ll rd()

void add(int p,int &q,int l,int r,int x)

int qmx(int x,int y,int l,int r)

int qmn(int x,int y,int l,int r)

bool check(int l1,int r1,int l2,int r2)

} return 1;

}void work()

for (int i=1;i<=q;i++) }

int main()

loj 6169 相似序列

講題前先講故事給每個數乙個隨機權值,如果兩個序列的數的隨機權值異或和相等可以認為這兩個序列排序後相同。考慮主席樹,對於兩個區間l r的數,二分乙個將那對不同的數分開的數值,然後用區間最大 小 查詢就能得到那兩個不同的數,再判斷一下即可。至於那個隨機為什麼對,只要考慮如果兩個序列相等,異或和必定相等,...

3230 相似子串

輸入第1行,包含3個整數n,q。q代表詢問組數。第2行是字串s。接下來q行,每行兩個整數i和j。1 i j 輸出共q行,每行乙個數表示每組詢問的答案。如果不存在第i個子串或第j個子串,則輸出 1。5 3ababa 3 55 9 8 10 1816 1樣例解釋 第1組詢問 兩個子串是 aba abab...

洛谷1140 相似基因

洛谷1140 相似基因 題目背景 大家都知道,基因可以看作乙個鹼基對序列。它包含了4種核苷酸,簡記作a,c,g,t。生物學家正致力於尋找人類基因的功能,以利用於診斷疾病和發明藥物。在乙個人類基因工作組的任務中,生物學家研究的是 兩個基因的相似程度。因為這個研究對疾病的 有著非同尋常的作用。題目描述 ...