好可恶卡常卡死我了。
T1
我们点分治。
对于每一个位置按照到点分中心的所有子树节点划分不同路径。
二分答案(最小的使得大于其的路径个数为K的长度)。
只需要给点分数据排序。
双指针扫一扫再加一个求有多少个大于等于当前二分长度的路径。
输出答案即可。
T2
维护一个线段树。
维护区间与缀和,或缀和。
考虑判断当前区间(and or)某一个数之后,其变化的位是否均相同。
如果相同打标记下传,否则向下递归。
查询直接查询区间最大值即可。
T3
比较有意思。
我们求得一个质数使得:
[Pequiv 1 (mod K)
]
这样(K|phi)。
所以这样的一个质数(P)是存在(K)次单位根了。
设其(K)次单位根为(g)。
那么有:
[g^Kequiv 1 (mod P)
]
对于每一个((i,j))随机出来一个(rd_{i,j})。
那么给每一个位置设一个权值(w_{i,j}=rd_{i,j}x^{a_{i,j}})。
当然如果这个位置没有利是,权值自然为0.
这样我们每次代入一个(x=g^i)求行列式。
对于(iin[0,K))我们求(K)次行列式,把值累加。
那么对于一个合法排列(不含有(a_{i,j}=-1))(p)来说,设(sigma(p))为其逆序对个数。
其对最终和的贡献即为:
[W=(sumlimits_{j=0}^{K-1}g^{jsumlimits_{i=1}^{n}a_{i,p_i}})(-1)^{sigma(p)}prodlimits_{i=1}^{n}rd_{i,p_i}
]
设:(S=sumlimits_{i=1}^{n}a_{i,p_i})。
那么当(Sequiv 0 (mod K))的时候。
我们的(g^Sequiv 1 (mod P))
前面那部分,如果我们的(Sequiv 0 (mod K))的话,值必然为(K)。
否则我们用等比数列求和公式:
[frac{g^{KS}-1}{g^{S}-1}
]
这样必然为0。
然而如果求和为0的话,很大概率是不存在解。
如果求和不为0的话,必然存在一个解。
(题解锅的太厉害了吧。。。