A
显然斐波那契数列。
B
函数的值不超过 log,枚举函数的层数。 先统计多少模 c 同余,模 c2 同余,...,层数是 log 级别。 用哈希表存然后统计答案即可。
C
因为是要乘积最大,且因为取模不能直接维护,再观察一下题目的 2 的幂性质,不难发现先取 log2 。
这样问题变为了切割一个矩形,内部不能包含 0(因为乘 0 就变 0 了),且矩形所有数的和最大。
容易发现最大矩形一定是极大矩形,二维前缀和+悬线法dp/单调栈维护即可。
D
发现函数嵌套后关于 x 还是一个函数,而且是一次函数。这个自己推一下易证。
于是就可以线段树维护单点修改和区间查询了。
现在问题在于区间加 b,这个不好 pushdown
。
考虑区间加后对合并后函数的变化。
k 值显然不变,b 值可以考虑每个函数被加 x 的贡献,来尝试维护 b 的变化量。
bl 导致结果的变化量为 x×kl+1×kl+2...
bl+1 导致结果的变化量为 x×kl+2×kl+3...
可以写出最终的式子:
x×i=l∑r−1j=i+1∏rkj+x
(注意 +x 是前面式子后单独的,不是 kj+x)
x 修改时给定,现在只要 pushup
时能维护 i=l∑r−1j=i+1∏rkj+1 就做完了。
右儿子部分,直接加上就完事,左儿子部分还要多乘一个 i=mid+1∏rki,这个也可以 pushup
时维护,直接左儿子乘右儿子。
E

F
考虑莫队,假定我们已经处理出区间 [l,r] 的答案,考虑去扩展到 [l,r+1] 的答案。
定义
S0[k]=1≤i≤k,imod2=0∑a[i]
S1[k]=1≤i≤k,imod2=1∑a[i]
我们转移的代价为:
l≤i≤r+1∑max(S0[r+1]−S0[i−1],S1[r+1]−S1[i−1])
将 S1[r+1]−S1[i−1] 提出 max 。
l≤i≤r+1∑max((S0[r+1]−S0[i−1])−(S1[r+1]−S1[i−1]),0)+S1[r+1]−S1[i−1]
而对于
l≤i≤r+1∑S1[r+1]−S1[i−1]
的处理是平凡的。
令
S[i]=S0[i]−S1[i]
那么前面的部分即
l−1≤i≤r∑max(S[r+1]−S[i],0)
我们发现这样对这一部分的处理同样是平凡的。
具体地:
令 Pre[i]=∑j=1i[S[r+1]>S[i]],Ps[i]=∑j=1i[S[r+1]>S[i]]a[j]
那么
l−1≤i≤r∑max(S[r+1]−S[i],0)=(Pre[r]−Pre[l−2])×S[r+1]+(Ps[r]−Ps[l−2])
对于 Pre,Ps 处理可以直接莫队二离做到 O(n1.5) 。