jzoj6152

题意

给定(n)长度序列(a_i),对于一个平方串([i,i+len-1][i+len,i+2len-1])(forall xin[i,i+len-1]),存在边((i,i+len,w_{len}))
求最小生成森林

做法

插点求出平方串,相当于([l,r])([l+len,r+len])(w_{len})
这个可以转化成([l,l+2^i-1])([l+len,l+len+2^i-1])连边,([r-2^i+1,r])([r+len-2^i-1,r+len])连边
可以维护(logn)个并查集第(i)个维护([x,x+2^i-1])([y,y+2^i-1])是否有连边

当在做([x,x+2^i-1])([y,y+2^i-1])连边的时候,可以查询第(i)个并查集(x,y)是否有连边

  • 有则退出
  • 没有
    (x,y)在该并查集连起来
    (i=0)则统计贡献
    否则递归([x,x+2^{i-1}-1])([y,y+2^{i-1}-1])([x+2^{i-1},x+2^{i}-1])([y+2^{i-1},y+2^i-1])连边

(O(nlognalpha(n)))

原文地址:https://www.cnblogs.com/Grice/p/12981418.html