BZOJ 4516 生成魔咒

2021-09-13 02:42:33 字數 1556 閱讀 7432

串串長度 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 拼湊起來形成乙個魔咒...