首页 > 其他分享 >Minimize Inversions

Minimize Inversions

时间:2024-02-20 22:34:02浏览次数:18  
标签:两个 Minimize 交换 如果 Inversions 对数 考虑 逆序

先来看看官方题解的做法,他一反常态的没有在逆序对题目里面考虑每个位置的贡献,而是直接回到定义考虑每对数是否是逆序对

我们考虑原数列中任意的一组数\((a_i,a_j)\)和\((b_i,b_j)\)。如果最开始两个都不是逆序对,那么交换之后两个都是逆序对;如果最开始两个都是逆序对,那么交换之后两个都不是逆序对;如果最开始一个是逆序对另外一个不是,那么交换之后仍然如此

最后一种情况的一组数无论怎么交换他对答案的贡献都是不会变化的,所以我们不用考虑;而前面两种组合,我们肯定要尽量的让交换后都不是逆序对的数量更多,而这显然是可以达到的,最后的序列中如果存在一组数\((a_i,a_j)\)和\((b_i,b_j)\)而且这两对数都是逆序对,那么我们交换一下就好了

我们以\(a_i\)为关键字排序,就可以数出来是满足题意的(当然这道题目放在B也应该猜到这么做)

再来看看我的证明,仍然是考虑每一个位置的贡献

首先,交换\(i\),\(j\)的操作肯定可以等价于交换若干次相邻的数对,所以为了简化问题,我们考虑每次操作交换相邻的两个数的情况

对\((a_i,a_{i+1})\)和\((b_i,b_{i+1})\),如果前者是逆序对但是后者不是,我们交换之后总逆序对数不变;如果两个都不是逆序对,交换之后逆序对个数加二;如果两个都是逆序对个数,交换之后逆序对个数减二

也就是说对任意的序列,如果把其按照\(a_i\)为关键字进行排序交换(像冒泡排序那样),那么每次的交换操作不会让总逆序对数增加,可能会减少,于是得证

标签:两个,Minimize,交换,如果,Inversions,对数,考虑,逆序
From: https://www.cnblogs.com/dingxingdi/p/18024185

相关文章

  • Minimize OR of Remaining Elements Using Operations
    MinimizeORofRemainingElementsUsingOperationsYouaregivena 0-indexed integerarray nums andaninteger k.Inoneoperation,youcanpickanyindex i of nums suchthat 0<=i<nums.length-1 andreplace nums[i] and nums[i+1] withas......
  • D. Yet Another Inversions Problem
    D.YetAnotherInversionsProblemYouaregivenapermutation$p_0,p_1,\ldots,p_{n-1}$ofoddintegersfrom$1$to$2n-1$andapermutation$q_0,q_1,\ldots,q_{k-1}$ofintegersfrom$0$to$k-1$.Anarray$a_0,a_1,\ldots,a_{nk-1}$oflength$n......
  • [Codeforces] CF1591C Minimize Distance
    CF1591CMinimizeDistance题目一条线上有\(n\)(\(1\len\le2\cdot10^5\))个仓库,第\(i\)个仓库的位置是\(x_i\)(\(1\lei\len\))。你有\(n\)箱货物,要分别运到这\(n\)个仓库里。你的初始位置在点\(0\),一次可以携带\(k\)(\(1\lek\len\))箱货物。在送完携带......
  • 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\)从小到大填即得)。套路地,统......
  • 题解 P5426 [USACO19OPEN]Balancing Inversions G
    来一篇简单易懂的良心题解。由于数值不是\(0\)就是\(1\),我们可以考虑将逆序对的统计方式化简。以左区间为例,设\(x\)为\(1\)的个数,\(p_i\)为第\(i\)个\(1\)的坐标,则逆序对个数为\(\sum\limits_{i=1}^{x}n-p_i-(x-i)\)。也就是\((n-x)\cdotx+\frac{x\cdot(x+1)}{......
  • CF1637H Minimize Inversions Number
    我直接??????????????????考虑一个数怎么做,就是逆序对减去一个\(i\)前面的逆序对再加上顺序对。考虑很多数怎么做,就是这个玩意的和再加上子序列种的顺序对减去逆序对,顺序对可以用逆序对表示,现在只考虑顺序对。注意到,如果\(i<j,p_i>p_j\)且\(i\)在子序列中\(j\)不在子序列中,那么把\(j\)弄......
  • 「解题报告」AGC023E Inversions
    好。首先考虑怎么计算方案数。我们考虑按照\(a_i\)从小往大选,设排序后的下标为\(b_i\),那么容易得出方案数为:\[s=\prod_{i=1}^n(a_{b_i}-i+1)\]我们设\(c_i=a_{b_i}-i+1\),这代表着某个数的选择方案数。然后考虑经典拆贡献,枚举每一对\((i,j)\),求\(p_i>p_j......
  • Educational Codeforces Round 75 C Minimize The Integer
    这道题的意思就是给出一个由数字组成的字符串,相邻的数字可以互换位置,但是如果相邻的为同奇同偶这样就不能交换。让我们求交换任意次数可以产生的最小数。这条限制就是说......
  • 1877.minimize-maximum-pair-sum-in-array 数组中最大数对和的最小值
    问题描述1877.数组中最大数对和的最小值解题思路贪心将数组从小到大排序,最小最大配对,次小次大配对,依次配对,结果就是这些配对和的最大值。代码classSolution{publi......
  • F. Binary Inversions
      思路:计算每个数组中每1相匹配的0的个数-->依次进行01转换比较每个1相匹配0的个数之和,取最大值。intoz[210000][2];intmain(){longtime,i,n,j;inta[......