題意
有一個長度爲 n 的01串 S,有些位置被 ′?′ 替代表示未知,有 q 組限制:
每組限制形如 a,b,l ,表示 S[a,a+l−1]=S[b,b+l−1]。
求滿足限制的情況下字典序最小的 S 。
數據點編號 |
n,q |
特殊性質 |
1 |
≤20 |
無 |
2 |
≤20 |
無 |
3 |
≤200 |
無 |
4 |
≤2000 |
無 |
5 |
≤2000 |
無 |
6 |
≤2000 |
無 |
7 |
≤106 |
所有的 l 之和小於等於 106 |
8 |
≤106 |
所有的 l 之和小於等於 106 |
9 |
2×≤104 |
無 |
10 |
3×≤104 |
無 |
11 |
3×≤104 |
無 |
12 |
4×≤104 |
無 |
13 |
6×≤104 |
無 |
14 |
105 |
無 |
15 |
2×105 |
無 |
16 |
3×105 |
無 |
17 |
4×105 |
無 |
18 |
5×105 |
無 |
19 |
6×105 |
無 |
20 |
7×105 |
無 |
21 |
8×105 |
無 |
22 |
9×105 |
無 |
23 |
106 |
無 |
24 |
106 |
無 |
25 |
106 |
無 |
題解
首先有比較顯然的暴力做法:把相同的位置用並查集連起來,一個連通塊如果有1就是1,否則就是0。
其實應該要想到分塊:每個限制分爲零散的點之間的限制和塊之間的限制,對點和塊分別維護並查集,同一個集合的相互或一下即可,效率O(nn)。
在此基礎上考慮倍增,把每個限制拆成log個長度爲2的次冪的塊分別連邊,按照塊長從大到小在並查集內依次去連,並把連通性下放到下一層,這樣就可以把所有限制下放到單個點,效率O(nlog2n)。
又發現連邊關係不需要不重,故直接像RMQ那樣連邊即可,效率O(nlogn)。