ytez黄sir模拟赛

A

做法很简单直接维护单调队列,找到每个元素的前一个和后一个大于他的即可

考场上写了O(n)O(1)rmqO(n)O(1)rmq

B

我会推式子!(下文用 (i,j)(i,j) 代表 gcd⁡(i,j)\gcd(i,j),用 [i,j][i,j] 代表 lcm(i,j)lcm (i,j),默认 n≤mn\leq m,除法下取整)

∏i=1n∏j=1m[i,j][i,j]=∏i=1n∏j=1m(ij(i,j))ij(i,j)=∏g=1n∏i=1n∏j=1m(ijg2×g)ijg2×g×ϵ((i,j)=g)\prod _{i=1}^n \prod_{j=1}^m [i,j]^{[i,j]} = \prod _{i=1}^n \prod_{j=1}^m(\frac{ij}{(i,j)}) ^{\frac{ij}{(i,j)}} =\prod_{g=1}^n \prod _{i=1}^n \prod_{j=1}^m(\frac{ij}{g^2}\times g) ^{\frac{ij}{g^2} \times g\times \epsilon((i,j)=g)}

​ 令 i=i/g,j=j/gi = i/g,j=j/g,变为枚举 i,ji,j 是 gg 的多少倍,再化掉元函数:

=∏g=1n∏i=1n/g∏j=1m/g(ijg)(ijg)ϵ((i,j)=1)=∏g=1n∏i=1n/g∏j=1m/g(ijg)(ijg)∑k∣(i,j)μ(k)=∏g=1n∏i=1n/g∏j=1m/g∏k∣(i,j)(ijg)(ijg)μ(k)=\prod_{g=1}^n\prod_{i=1}^{n/g}\prod_{j=1}^{m/g} (ijg)^{(ijg)\epsilon((i,j)=1)} =\prod_{g=1}^n\prod_{i=1}^{n/g}\prod_{j=1}^{m/g} (ijg)^{(ijg)\sum_{k|(i,j)} \mu(k)} =\prod_{g=1}^n\prod_{i=1}^{n/g}\prod_{j=1}^{m/g}\prod_{k|(i,j)} (ijg)^{(ijg)\mu(k)}

注意说这个西格玛可以放下去

​ 令现在的 i=i/k,j=j/ki = i/k,j=j/k

=∏g=1n∏k=1n/g∏i=1n/gk∏j=1m/gk(ijgk2)(ijgk2)μ(k)=∏g=1n∏k=1n/g(∏i=1n/gk∏j=1m/gk(ij)(ij))gk2μ(k)×∏g=1n∏k=1n/g(gk2)μ(k)gk2×∑i=1n/gk∑j=1m/gkij=\prod_{g=1}^n\prod_{k =1} ^{n/g} \prod_{i=1}^{n/gk}\prod_{j=1}^{m/gk} (ijgk^2)^{(ijgk^2)\mu(k)} =\prod_{g=1}^n\prod_{k =1} ^{n/g} (\prod_{i=1}^{n/gk}\prod_{j=1}^{m/gk} {(ij)^{(ij)}})^{gk^2\mu(k)} \times \prod_{g=1}^n\prod_{k =1} ^{n/g}(gk^2)^{\mu(k)gk^2 \times \sum_{i=1}^{n/gk}\sum_{j=1}^{m/gk}ij}

​ 是不是有些端倪了……我们令 f(n,m)=∏i=1n∏j=1m(ij)ij,S(n)=∑i=1nif(n,m)=\prod_{i=1}^n\prod_{j=1}^m (ij)^{ij} , S(n)=\sum_{i=1}^n i ,再令 T=gkT=gk 枚举

左半边=∏g=1n∏k=1n/gf(n/gk,m/gk)gk2μ(k)=∏T=1nf(n/T,m/T)∑k∣Tk2μ(k)Tk=∏T=1nf(n/T,m/T)T∑k∣Tkμ(k)左半边=\prod_{g=1}^n \prod_{k=1}^{n/g} f(n/gk,m/gk)^{gk^2\mu(k)} =\prod_{T=1}^n f(n/T,m/T)^{\sum_{k|T}k^2\mu(k)\frac{T}{k}} =\prod_{T=1}^n f(n/T,m/T)^{T\sum_{k|T}k\mu(k)}

右半边=∏g=1n∏k=1n/g(k2)gk2μ(k)S(n/gk)S(m/gk)×∏g=1n∏k=1n/g(gg)k2μ(k)S(n/gk)S(m/gk)=∏T=1n∏k∣T((k)T2kμ(k))S(n/T)S(m/T)×∏T=1n∏k∣T((Tk)Tkμ(k))S(n/T)S(m/T)=∏T=1n∏k∣T(kTkμ(k))S(n/T)S(m/T)×∏T=1n∏k∣T(TTkμ(k))S(n/T)S(m/T)右半边=\prod_{g=1}^n \prod_{k=1}^{n/g} (k^2)^{gk^2\mu(k)S(n/gk)S(m/gk)} \times \prod_{g=1}^n \prod_{k=1}^{n/g} (g^g)^{k^2\mu(k)S(n/gk)S(m/gk)} \\ =\prod_{T=1}^n\prod_{k|T} ((k)^{T2k\mu(k)})^{S(n/T)S(m/T)} \times \prod_{T=1}^n\prod_{k|T} ((\frac{T}{k})^{Tk\mu(k)})^{S(n/T)S(m/T)} \\ =\prod_{T=1}^n\prod_{k|T} (k^{Tk\mu(k)})^{S(n/T)S(m/T)} \times \prod_{T=1}^n\prod_{k|T} (T^{Tk\mu(k)})^{S(n/T)S(m/T)}

令 L(T)=T∑k∣Tkμ(k),G(T)=∏k∣Tkkμ(k)L(T) =T\sum_{k|T}k\mu(k) ,G(T)=\prod_{k|T} k^{k\mu(k)} 其中第二个到第三个是把k乘过去了

左半边=∏T=1nf(n/T,m/T)L(T);右半边=∏T=1n(TL(T)×G(T)T)S(n/T)S(m/T) 左半边=\prod_{T=1}^n f(n/T,m/T)^{L(T)} ;右半边=\prod_{T=1}^n (T^{L(T)} \times G(T)^T)^{S(n/T)S(m/T)}

f(n,m)=(∏i=1nii)S(m)(∏i=1mii)S(n)f(n,m) = (\prod_{i=1}^n i^i)^{S(m)} (\prod_{i=1}^m i^i)^{S(n)} ,可通过 O(nlog⁡n)O(n\log n) 预处理 ∏i=1nii\prod_{i=1}^n i^i 再每次查询时做快速幂求得。

L,GL,G 都可以 O(nln⁡n)O(n \ln n) 枚举约数算得,然后再处理 TL(T),L(T)TT^{L(T)} ,L(T)^T 的前缀积和 L(T)L(T) 的前缀和,就可以数论分块解决啦。时间复杂度 O(nlog⁡n+Tnlog⁡ mod )O(n\log n+T\sqrt n \log \bmod) ,期望得分 100pts

C

询问两个会有m−xi−xj−(i,j)m-x_i-x_j-(i,j),(i,j)(i,j)表示i,j之间逆序对数

观察有

∑iquery(i,j)=2m+(n−3)xi\sum_{i}query(i,j)=2m+(n-3)x_i

然后直接做就好了,有了xix_i就可以会知道(i,j)(i,j)是不是逆序对,就能得到i的排名了

但是我们也有一个叫做归并排序的方法,可以在nlognnlogn次逆序对关系得出答案

然后考虑优化,我们可以考虑怎么快速查询i位置的答案

先查询得到x1,xnx_1,x_n的取值,这里我们直接查询O(2n−2)O(2n-2)

然后可以直接得到每个的信息

询问1,i,n

你会发现

只有1,i为逆序对或者i,n为逆序对,或者1,i,n没有逆序对

两个信息求和有2xi2x_i

但是可能因为上述情况出现奇数,我们+1/2即可得到xix_i

然后我们就有每个xix_i

调用归并排序,就是类似得到每个位置逆序对,还原原来序列即可