A
倒过来搞,关键位置只有(2,3,5)的倍数,由于每次是除以一个数,关键位置仅有(60^3)
B
这题为啥比A简单...
C
显然,当前位置与初始位置是一一对应的
对三进制(N)位建trie,特殊的是,根到叶子节点是从低位到高位
每个叶子节点的位置对应着当前所处的位置,每个叶子节点的编号对应着初始的位置
操作一:每个点交换((1,2))儿子。这个可以打标机
操作二:考虑最低位,(0longrightarrow 1),(1longrightarrow 2);(2longrightarrow 0)然后进位。儿子((0,1,2)longrightarrow (2,0,1)),然后递归当前(0)儿子(也就是((2,0,1))中的(2))
D
首先对每个字符,单独一个字符,查询
- 若得到的答案均相同,说明每个字符均出现在字符串中。则(L=)查询(+1)
- 若得到的答案不同,显然仅有两种答案,(L=)较大答案
这样我们得到了字符串的长度(L)
对每个字符,长度为(L)的串,查询。
这样我们得到了每个字符出现的次数
结论:对于(S,T(|S|le |T|)),其编辑距离为(|T|-|S|)的充要条件为(S)是(T)的子序列
根据此结论,我们可以对字符进行合并。
具体而言,令(f(S))(其中(S)是字符集的子集)在字符串中的最大子序列。
对于(f(S),f(T)(Scap T=emptyset)),可以通过(O(f(S)+f(T)))次查询合并
E
令(f_i)为(i)位置最大值,显然:(f_i=max(a_i,frac{f_{i-1}+f_{i+1}}{2}-b_i))
有个不需要啥技术含量的(O(n^2)),就是(a_i)从大到小,每次更新一个位置,然后用这个位置更新其他的
通过推式子大概会得到一个麻烦的等差数列为系数的东西,用线段树维护。(O(nlogn))
不过会被卡精度
考虑若(b_i=0),对于固定的两点(u,v),去更新其他点
有
这是个以((u,a_u),(v,a_v))为端点,其连线为(P_i)的东西,可以用凸包维护
但我们实际的式子是这样的
我们考虑构造({c}),使得(P_i'=P_i-c_i)以满足较简式子
序列({c})需满足:(b_i = dfrac {c_{i-1}+c_{i+1}}2-c_i)
令(c_1=c_2=0,c_{i+1}=2(b_i+c_i)-c_{i-1})即满足条件