傳送門
題意:
給字串
s s
,支援:
1.末尾加入字元。
2.查詢[l
,r]' role="presentation">[l,
r][l
,r]中出現兩次的最長字串。
題解:
好題。考慮離線做法:
動態插入後面的字元,更新前面
l l
的答案。
當我們插入乙個字元
r' role="presentation">r
r的時候,與前面的公共子串為它的字尾。 我們考慮暴力跳fa
ilf ai
l鏈來更新答案:
每個位置記last表示endpos的最後乙個位置,那麼這個位置能更新i−
len[
i]+1
i −l
en[i
]+
1往左的
l l
,以及i−
len[
i]+1
~i' role="presentation">i−l
en[i
]+1~
ii−l
en[i
]+1~
i的l。 其中第一部分的答案為le
n[i]
l en
[i
],第二部分則為le
n[i]
−(p−
(i−l
en[i
]+1)
) len
[i]−
(p−(
i−le
n[i]
+1))
tagt ag
即可。發現這個覆蓋過程就是lc
t lct
的access
a cc
es
s,那麼我們用lct來維護這個last即可。(均攤o(
nlogn)
o (n
logn)
,想不到字串有這麼優美的性質)
#include
#include
using
namespace
std;
typedef
long
long ll;
typedef pair pii;
typedef
unsigned
long
long ull;
const
int rlen=1
<<18|1;
inline
char nc()
inline
int rd()
while(isdigit(ch))
return i*f;
}inline
void w(int x)
if(x<0)
while(x)
while(buf[0])
}const
int n=2e5+50, inf=0x3f3f3f3f, lg=200;
int n;
namespace sgt
inline
void modify(int &y,int x,int l,int r,int l,int r,int v)
int mid=(l+r)>>1;
if(r<=mid) modify(lc[y],lc[x],l,mid,l,r,v);
else
if(l>mid) modify(rc[y],rc[x],mid+1,r,l,r,v);
else modify(lc[y],lc[x],l,mid,l,mid,v), modify(rc[y],rc[x],mid+1,r,mid+1,r,v-(mid+1-l));
}inline
void modifya(int &y,int x,int l,int r,int l,int r,int v)
int mid=(l+r)>>1;
if(r<=mid) modifya(lc[y],lc[x],l,mid,l,r,v);
else
if(l>mid) modifya(rc[y],rc[x],mid+1,r,l,r,v);
else modifya(lc[y],lc[x],l,mid,l,r,v), modifya(rc[y],rc[x],mid+1,r,l,r,v);
}inline
int ask(int x,int l,int r,int p)
inline
int ask(int l,int r)
}namespace lct
}pool[n];
inline
bool isroot(node *x)
inline
bool which(node *x)
inline
void rotate(node *x) else
}inline
void splay(int p) rotate(x);}}
inline
void link(int p,int q)
inline
void cut(int p,int q)
inline
void access(int &x,int p,int pos,int *len)
if(t->rc) t->rc->last=t->last;
t->rc=y; t->last=pos; }}
}namespace sam
}lct::access(sgt::rt[pos],p,pos,l);
lst=p;
}}char ch[n]; int len,type,la;
int main() else
}}
BJ模擬 期望(容斥)
題意 有n nn個變數x1n x n x1n 每個變數取值在 0,1 0,1 0,1 之間隨機,設s i 1 nxi s lfloor sum nx i rfloor s i 1n x i 求s ms m sm的期望 mo d998244353 pmod mod99 8244 353 題解 不妨設 ...
BJ模擬 帳篷 凸包
題目描述 解題思路 當n,m很小時,直接暴力列舉起點,用三角剖分的方式,狀態記錄當前點和上乙個點dp,複雜度為o n4 o n 4 當n,m較大時,h已經遠超1e9z,直接求周長最小凸包即可,注意周長最小時自動滿足凸性,所以可以只列舉起點,狀態記錄當前點dp即可,也可以用floyed求最小環的方式d...
BJ模擬 tree 樹形dp
題目描述 給一棵 n n 個節點的邊帶權樹,要求在樹上選出 k role presentation style position relative k k個點 a1 a2,aka 1,a2,a k,使得 k 1i 1dis ai,ai 1 i 1k 1 dis ai,a i 1 最小。1 k n 3...