思路:
首先我們已經會了字尾陣列求本質不同的子串個數
這道題跟那個差不多
首先我們可以知道按字典序排好的每個字尾之前包含多少本質不同的字串
就是sigma(n-sa[i]+1-ht[i]+bi[i-1])
在這上面二分就可以求出來原串是什麼了
就把兩個字尾的lcp和原串的長度取個min即可
再把串倒過來也差不多這麼搞一遍就好啦
//by siriusren
#include
#include
#include
using namespace std;
#define int long long
const int n=100050;
int n,q,a[n],b[n],cnta[n],cntb[n],rk[n],ht[n],sa[n],tsa[n],f[n][20],bi[n],base[n];
char s[n];
struct askask[n];
void sa()
for(int i=1,j=0;i<=n;i++)
}void init_rmq()
int lcp(int x,int y)
signed main()
}for(int i=1;i<=n/2;i++)swap(s[i],s[n-i+1]);
sa(),init_rmq();
for(int i=1;i<=n;i++)bi[i]=n-sa[i]+1-ht[i]+bi[i-1];
for(int i=1;i<=q;i++)
else puts("-1");
}}
bzoj 3230 相似子串
time limit 20 sec memory limit 128 mb submit 1767 solved 438 submit status discuss 輸入第1行,包含3個整數n,q。q代表詢問組數。第2行是字串s。接下來q行,每行兩個整數i和j。1 i j 輸出共q行,每行乙個數表示...
BZOJ 3230 相似子串
給定乙個長度為 n 的字串以及 q 組查詢,每組查詢給定 a 和 b 求在所有本質不同子串中排名第 a 和第 b 的串的最長公共字首與最長公共字尾的平方和.n,q le 1 times 10 5 字尾陣列板子題.麻麻我終於會用字尾陣列辣 本來想接著用sam的.但是發現多組查詢排名為 k 的本質不同子...
BZOJ3230 相似子串
3230 相似子串 time limit 20 sec memory limit 128 mb submit 913 solved 223 submit status description input 輸入第1行,包含3個整數n,q。q代表詢問組數。第2行是字串s。接下來q行,每行兩個整數i和j。...