首页 > 其他分享 >[ARC154E] Reverse and Inversion

[ARC154E] Reverse and Inversion

时间:2023-10-05 17:23:12浏览次数:40  
标签:ARC154E ni Inversion Reverse limits ip sum times aligned

2023-09-09

题目

[ARC154E] Reverse and Inversion

难度&重要性(1~10):9.5

题目来源

luogu

题目算法

数学

解题思路

Update :2023.8.28修改一处笔误

这是一道很妙的计数题,考试的时候没想到。

这道题我们首先会想到去化简一下式子 \(\sum\limits_{i<j,p_i>p_j}(j-i)\),这很明显是要求逆序对,但是这个 \((j-i)\) 就对我们来说有点棘手,所以很容易想到去将 \(i,j\) 拆开分别计算贡献:\(\sum\limits_{i<j,p_i>p_j}j-\sum\limits_{i<j,p_i>p_j}i\)。

拆开之后我们就需要有一个主次关系,即以 \(i\) 或者 \(j\) 的视角来继续化简式子,这里我们以 \(i\) 的视角入手,我们需要找到 \(i\) 前面比 \(p_i\) 大的,以及后面比 \(p_i\) 小的差:

\[\begin{aligned}&\sum\limits_{i=1}^ni\sum\limits_{j=1}^{i-1}[p_i<p_j]-\sum\limits_{i=1}^ni\sum\limits_{j=i+1}^n[p_i>p_j]\\ = & \sum\limits_{i=1}^ni\left(\sum\limits_{j=1}^{i-1}[p_i<p_j]-\sum\limits_{j=i+1}^n[p_i>p_j]\right)\end{aligned} \]

好了,现在我们已经将 \(j-i\) 的贡献拆开计算了,但是由于 \([p_i<p_j]\) 和 \([p_i>p_j]\) 的符号方向不同,我们也只能分开计算,如何才能将符号统一呢。很简单,只需要将 \(\sum\limits_{j=1}^i[p_i<p_j]\) 旋转一下。

\[\begin{aligned}& \sum\limits_{i=1}^ni\left(\sum\limits_{j=1}^{i-1}[p_i<p_j]-\sum\limits_{j=i+1}^n[p_i>p_j]\right)\\=& \sum\limits_{i=1}^ni\left(\sum\limits_{j=1}^i[p_i<p_j]-\sum\limits_{j=i+1}^n[p_i\ge p_j]\right)\\= & \sum\limits_{i=1}^ni\left(\left(i-\sum\limits_{j=1}^i[p_i>p_j]\right)-\sum\limits_{j=i+1}^n[p_i>p_j]\right)\\= &\sum\limits_{i=1}^ni\left(i-\sum\limits_{j=1}^n[p_i>p_j]\right)\end{aligned} \]

由于题目说了 \(p\) 是一个 \(1\sim n\) 的排列,那么比 \(p_i\) 小于等于的数有多少个能,当然是 \(p_i\) 个啦。这样我们就得到:

\[\begin{aligned} &\sum\limits_{i<j,p_i>p_j}(j-i)\\=& \sum\limits_{i=1}^ni(i-p_i)\\=& \sum\limits_{i=1}^ni^2-p_i\times i\end{aligned} \]

这里 \(i^2\) 是好处理的,但是 \(p_i\times i\) 不好处理,因为 \(p_i\) 的位置是不断在变化的。我们为了更好的处理就定义 \(w_i\) 表示 \(p_i\) 的最终所在位置,即 \(\sum\limits_{i=1}^ni^2-p_i\times w_i\)。

但由于 \(m\le 2\times 10^5\),是没法暴力处理。因此需要用一个操作:将求和改为求期望位置。这个操作的意义感觉是由下文结果体现的。

我们考虑翻转操作的本质是什么。假设对于 \(i\) 位置的值,若要将其翻转到 \(j\)。考虑有多少种操作可行

显然,翻转的中心就是 \(\dfrac{i+j}{2}\)。

  • 当 \(i<j\) 时,方案数为 \(\min(i,n-j+1)\)。
  • 当 \(i>j\) 时,方案数为 \(\min(j,n-i+1)\)。

由于分类讨论显然很烦,所以我们就要尝试将它们合并。可以发现,当 \(i<j\) 时,\(n-i+1>n-j+1\),而 \(i>j\) 同理,所以两种情况是可以合并在一起为 \(\min(i,n-i+1,j,n-j+1)\) 的。然后,我们就会发现把 \(i\) 翻转到 \(j\) 的概率与翻转到 \(n-j+1\) 的概率是相等的,那么它的总贡献就是 \(n-j+1+j=n+1\) 平均期望位置就是 \(\dfrac{n+1}{2}\),这样我们就将 \(i,j\) 的贡献给成功剔除了,而如果 \(i\) 没有进行翻转,则期望位置就是 \(i\),不妨设 \(k=\dfrac{C_{i}^2+C_{n-i+1}^2}{C_{n+1}^2}\),即一次操作不包括位置 \(x\) 的概率。

这样 \(w_i\) 的期望值我们就可以算出来了:

\[w_i=k^m\times i+(1+k^m)\times \frac{n+1}{2} \]

这样这道题我们就做出来了,时间复杂度为 \(O(n\log m)\),可以通过,它唯一的复杂度瓶颈就在于快速幂。

感谢 @Populus_euphratica 和 @MoriyaSuwako 指出错误

完成状态

已完成

标签:ARC154E,ni,Inversion,Reverse,limits,ip,sum,times,aligned
From: https://www.cnblogs.com/OIerBoy/p/17743645.html

相关文章

  • D. Reverse Madness
    根据数据可知,字符串s被分成互不相交的子集,然后在每个子集内根据x的位置经行左右翻转,可知翻转为偶数时恢复原样,所以可以根据差分数组进行求解点击查看代码#include<bits/stdc++.h>usingnamespacestd;#defineLLlonglongconstintN=2e5+10;inta[N],b[N];voids......
  • [论文阅读] Anomaly detection via reverse distillation from one-class embedding
    Anomalydetectionviareversedistillationfromone-classembeddingIntroduction在知识蒸馏(KD)中,知识是在教师-学生(T-S)对中传递的。在无监督异常检测的背景下,由于学生在训练过程中只接触到正常样本,所以当查询是异常的时候,学生很可能会产生与教师不一致的表示。然而,在实际情......
  • [AGC030D] Inversion Sum
    ProblemStatementYouaregivenanintegersequenceoflength$N$:$A_1,A_2,...,A_N$.Letusperform$Q$operationsinorder.The$i$-thoperationisdescribedbytwointegers$X_i$and$Y_i$.Inthisoperation,wewillchooseoneofthefollowingtwoacti......
  • BUUCTF Reverse/[NPUCTF2020]你好sao啊
    里面就一个加密函数,分析后发现这是一段变表的base解密,将四个字符替换成三个字符点击查看代码void*__fastcallRxEncode(constchar*a1,inta2){intv3;//[rsp+18h][rbp-38h]intv4;//[rsp+1Ch][rbp-34h]intv5;//[rsp+20h][rbp-30h]intv6;//[rsp+2......
  • AtCoder Grand Contest 023 E Inversions
    洛谷传送门AtCoder传送门首先将\(a\)从小到大排序,设\(p_i\)为排序后的\(a_i\)位于原序列第\(p_i\)个位置,\(x_i\)为要填的排列的第\(i\)个数。设\(A=\prod\limits_{i=1}^n(a_i-i+1)\),则\(A\)为排列的总方案数(考虑按\(a_i\)从小到大填即得)。套路地,统......
  • RPF(reverse path forwarding)
    RPF(反向路径转发)路由器收到组播数据报文后,只有确定这个数据报文是从自身连接到组播源的接口上收到的,才进行转发,否则丢弃RPF检查在大伯路由表中查找到组播报文源地址的路由如果该路由的出接口就是组播报文的入接口,RPF检查成功,否则RPF检查失败,报文丢弃注意:该路由的出接口就是组播报文......
  • Reverse入门指北
     moectf{F1rst_St3p_1s_D0ne}Reverse入门指北两个附件,其中有一个exe,但是直接打开失败了  拖入die,无壳32位拖入ida,F5\shift+F12\ctrl+X都试了试,在shift+F12查看字符串中发现flag,简单解决 复制提交moectf{F1rst_St3p_1s_D0ne} ......
  • ES中reverse_nested+sum+bucket_sort
    记一次嵌套sum聚合的排序DSL场景:根据nested_gs2Entity.kw_entity聚合,filter对聚合结果过滤类型是产品,实体是需要关心的产品列表,在结果中sum互动量long_interaction,和花费long_paidPrice然后在结果中根据sum的结果排序{"aggregations":{"agg_entity_a":{"aggre......
  • CF1864B Swap and Reverse 题解
    注意到交换操作,无法改变下标的奇偶性,因此只能通过考虑翻转操作改变。注意到如果\(i\)是奇数,那么要令\(i+k-1\)为偶数的话\(k\)必须为偶数,若\(i\)是偶数,要令\(i+k-1\)是奇数的话,\(k\)也应为偶数,而\(k\)为奇数的情况翻转了也无法改变奇偶性。因此通过\(k\)的奇偶性......
  • C# List.Reverse 方法使用
    此方法用于Array.Reverse反转元素的顺序usingSystem;usingSystem.Collections.Generic;publicclassExample{publicstaticvoidMain(){List<string>dinosaurs=newList<string>();dinosaurs.Add("Pachycephalosaurus")......