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),默认 nmn\leq m,除法下取整)

i=1nj=1m[i,j][i,j]=i=1nj=1m(ij(i,j))ij(i,j)=g=1ni=1nj=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,jgg 的多少倍,再化掉元函数:

=g=1ni=1n/gj=1m/g(ijg)(ijg)ϵ((i,j)=1)=g=1ni=1n/gj=1m/g(ijg)(ijg)k(i,j)μ(k)=g=1ni=1n/gj=1m/gk(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=1nk=1n/gi=1n/gkj=1m/gk(ijgk2)(ijgk2)μ(k)=g=1nk=1n/g(i=1n/gkj=1m/gk(ij)(ij))gk2μ(k)×g=1nk=1n/g(gk2)μ(k)gk2×i=1n/gkj=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=1nj=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=1nk=1n/gf(n/gk,m/gk)gk2μ(k)=T=1nf(n/T,m/T)kTk2μ(k)Tk=T=1nf(n/T,m/T)TkTkμ(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=1nk=1n/g(k2)gk2μ(k)S(n/gk)S(m/gk)×g=1nk=1n/g(gg)k2μ(k)S(n/gk)S(m/gk)=T=1nkT((k)T2kμ(k))S(n/T)S(m/T)×T=1nkT((Tk)Tkμ(k))S(n/T)S(m/T)=T=1nkT(kTkμ(k))S(n/T)S(m/T)×T=1nkT(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)=TkTkμ(k),G(T)=kTkkμ(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(nlogn)O(n\log n) 预处理 i=1nii\prod_{i=1}^n i^i 再每次查询时做快速幂求得。

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

C

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

观察有

iquery(i,j)=2m+(n3)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(2n2)O(2n-2)

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

询问1,i,n

你会发现

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

两个信息求和有2xi2x_i

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

然后我们就有每个xix_i

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