串串長度 n≤1
05
n \leq 10^5
n≤10
5, 串中元素x≤1
09
x\leq 10^9
x≤10
9,問每加入乙個數後本質不同的子串數
裸的s am
samsa
m或者是離線sasa
sa。 這裡討論sasa
sa做法。實際上問題就是把整個串翻轉一下 然後就相當於計算完每個串的貢獻以後把這個串的貢獻刪掉。
考慮到刪除貢獻的影響, 僅僅影響sai
sa_i
sai
緊鄰位置前後的串串 考慮拉乙個鍊錶
每次統計完乙個串就重置hei
ghtn
x=
0height_ = 0
height
nx=
0然後鍊錶把前後的hei
gh
theight
height
重新拉起來。
#include
#include
#include
#include
const
int n =
1e6+7;
typedef
long
long ll;
int x[n]
, y[n]
, sa[n]
, c[n*2]
, m, n;
int rk[n*2]
, height[n*2]
;int ss[n]
;inline
intmax
(int a,
int b)
inline
intmin
(int a,
int b)
inline
void
getsa()
int k =0;
for(
int i =
1; i <= n; i++
) rk[sa[i]
]= i;
for(
int i =
1; i <= n; i++)}
struct quesqt[n]
;inline
intcmp
(ques a, ques b)
int pnum;
struct edge
inline
void
start()
}e;ll ans[n]
;int
main()
for(
int i = n -
1; i >=
1; i--
) ans[i]
= ans[i]
+ ans[i +1]
;for
(int i = n; i >=
1; i--
) printf (
"%lld\n"
, ans[i]);
return0;
}
BZOJ4516 生成魔咒,字尾陣列 Splay
time 2016.05.28 author xiaoyimi 思路 考場上寫的60分kmp 學過字尾陣列的都知道,乙個串裡不同子串的個數 n sa i heig ht i 對於問題中串每次插入乙個數字,它實際上使長度增加了1,即 n n2 n 1 2,對答案的貢獻是2n 1,注意這裡的n不是總長,...
bzoj4516 SDOI2016 生成魔咒
time limit 10 sec memory limit 128 mb submit 376 solved 232 submit status discuss 魔咒串由許多魔咒字元組成,魔咒字元可以用數字表示。例如可以將魔咒字元 1 2 拼湊起來形成乙個魔咒串 1,2 乙個魔咒串 s 的非空字串...
bzoj4516 Sdoi2016 生成魔咒
4516 sdoi2016 生成魔咒 time limit 10 sec memory limit 128 mb submit 575 solved 327 submit status discuss 魔咒串由許多魔咒字元組成,魔咒字元可以用數字表示。例如可以將魔咒字元 1 2 拼湊起來形成乙個魔咒...