傳送門
由於ll
l串是不增的
可以發現一定連續一段l
ll串相同
於是考慮先分割成單減的,然後每一部分按迴圈節分割
考慮假設已經求出了1...i−
11...i-1
1...i−
1的lynd
on
lyndon
lyndon
分解且恰好分解完
考慮從i
ii開始,設j,k
j,kj,
k兩指標,初始j=i
,k=i
+1
j=i,k=i+1
j=i,k=
i+1k
kk指向迴圈節ttt
t′
tttt'
tttt
′的結尾,j=k
−∣t∣
j=k-|t|
j=k−∣t
∣若s[j]
=s[k
],j+
+,k+
+s[j]=s[k],j++,k++
s[j]=s
[k],
j++,
k++即可
若s [j
]>s[
k]
s[j]>s[k]
s[j]
>s[
k],那麼k
kk之後單獨一定更優,而前面是k−j
k-jk−
j長度的迴圈節
若s [j
]
k],j
=i,k
++
s[j]s[
j]k],j
=i,k
++重新形成了迴圈節
複雜度o(n
)o(n)
o(n)
#include
using
namespace std;
#define cs const
#define re register
#define pb push_back
#define pii pair
#define ll long long
#define y1 shinkle
#define fi first
#define se second
#define bg begin
cs int rlen=
1<<20|
1;inline
chargc(
)inline
intread()
inline ll readll()
inline
intreadstring
(char
*s)template
<
typename tp>
inline
void
chemx
(tp &a,tp b)
template
<
typename tp>
inline
void
chemn
(tp &a,tp b)
cs int n=(1
<<20)
|1;char s[n]
;int n;
intmain()
while
(i<=j)
}}
並查集 模板 LOJ109
樣板題幾乎沒必要分析,值得注意的是這道題需要先構建乙個01序列,再進行取模再輸出結果。這裡01序列的構建方法,可以用位運算簡單實現,事實上位運算左移一位等於原值乘以2,但是對這道題來講,寫左移顯然比乘以2更好理解,也有更高的效率。詳見 include include include include ...
無源匯可行流 模板LOJ 115
自個設個源點s,匯點t,每個點 du i 入度 出度。du i 0時 加邊s i,邊權為du i du i 0時 加邊i t,邊權為 du i 設sum為所有 0的du i 的和 求s t的最大流,如果maxflow sum,則存在可行流,此時每條邊流掉的流量 它原本的下界就是實際的流量 dfs過程...
無源匯有上下界可行流 loj模板
loj模板題 思想是 如果存 在可行流 每條邊 必定至少 有下界的 流量 思想是,如果存在可行流,每條邊必定至少有下界的流量 思想是,如果 存在可行 流,每條 邊必定至 少有下界 的流量 那 麼直 接用下屆 填充邊的 流量 那麼直接用下屆填充邊的流量 那麼直接用下 屆填充邊 的流量 每 條邊 的流量...