首页 > 其他分享 >P8500 [NOI2022] 冒泡排序 题解

P8500 [NOI2022] 冒泡排序 题解

时间:2024-06-21 15:44:39浏览次数:11  
标签:题解 sum 位置 冒泡排序 贡献 P8500 ge 权值 jB

考虑特殊性质 B。

限制相当于钦定一些位置的值,其他位置无限制。可以发现性质:无限制的位置上填的值是单调不减的。
证明:设得到的最优序列为 \(A\),对于无限制的位置 \(i,j\),若 \(A_i>A_j\),交换 \(i,j\) 后逆序对个数必然减小。
根据改性质,只需考虑每个位置对已经确定位置的位置的贡献。可以用权值线段树维护。

考虑特殊性质 C。

对于限制 \(L,R,V\),有限制 \(A_i\ge V,\forall i\in[L,R]\)。同时,\([L,R]\) 中必定有位置等于 \(V\)。发现对 \([L,R]\) 内的数排序是不劣的。故可以钦定 \(A_L=V\),并且不用考虑该区间内互相产生贡献。发现继续使用 \(B\) 的做法:从左到右考虑未确定值的位置 \(i\),设其受到考虑限制为 \(A_i\ge k_i\),只考虑所有已确定值的位置的贡献(包含所有 \(i\) 前的数和 \(i\) 后被钦定的数),在权值线段树上查找 \(\ge k_i\) 的最优解是正确的。
证明:设用以上方法得到 \(A_i=x\),权值线段树上找出的贡献(即已确定的数产生的贡献)为 \(V\),未被考虑的贡献为 \(v\)。若存在更优解 \(A_i=y\),做以下讨论:

  1. 若 \(y>x\)。根据我们的做法,\(y\) 在权值线段树上找出的贡献 \(V'\ge V\)。对于剩余位置,\(A_i\) 越大可能的贡献越多,故 \(v'\ge v\)。有 \(V+v\le V'+v'\),矛盾。
  2. 若 \(y<x\)。假设这种填法得到了最优序列 \(B\),对 \(B\) 做如下调整:\(\forall j\ge i\) 且 \(y\le B_j <x\),将 \(B_j\) 更改为 \(x\),得到新序列 \(B'\)。考虑逆序对数目的变化量。显然,被修改的位置不互相产生贡献,故一定不劣于原本情况。被修改的位置对于 \(B_j>x\) 的位置的贡献不发生改变。故只需考虑被修改的位置对于原本确定的位置的贡献的变化量。对于被修改的位置 \(t\),其贡献为
    \(\sum_{j=1}^{t-1} [B_j>B_t]+\sum_{j=t+1}^n [B_j<B_t]\) 即 \(\sum_{j=1}^{i-1} [B_j>B_t]+\sum_{j=i}^{t-1} [B_j>B_t]+\sum_{j=i+1}^n [B_j<B_t]-\sum_{j=i+1}^t [B_j<B_t]\) 因为 \(B_t\le B_i\),可写作 \(\sum_{j=1}^{i-1} [B_j>B_t]+\sum_{j=i+1}^n [B_j<B_t]+\sum_{j=i}^{t} ([B_j>B_t]-[B_j<B_t])\) 根据我们选取 \(x\) 的方式 \(\sum_{j=1}^{i-1} [B_j>B_t]+\sum_{j=i+1}^n [B_j<B_t]>\sum_{j=1}^{i-1} [x>B_t]+\sum_{j=i+1}^n [x<B_t]\),又因为 \(x>B_t\),\(\sum_{j=i}^{t} ([B_j>B_t]-[B_j<B_t])\le\sum_{j=i}^{t} ([B_j>x]-[B_j<x])\)。 综上,\(t\) 的总贡献减小。故 \(B'\) 中逆序对数小于 \(B\),矛盾。

标签:题解,sum,位置,冒泡排序,贡献,P8500,ge,权值,jB
From: https://www.cnblogs.com/tybbs/p/18260272

相关文章

  • P4317 花神的数论题 题解
    头话说好久没写题解了P4317花神的数论题题链题意:给你一个不超过\(10^{15}\)的数\(n\),求\(\prod_{i=1}^nsum_i\),其中\(sum_i\)表示\(i\)在二进制表示下\(1\)的个数。学了几道题后,本能的设出了\(f_{i,j}\)表示\(i\)位数中含\(j\)个\(1\)的数的个数,转移......
  • 【题解】P6323 | 容斥 分拆数
    本题存在低于\(O(nc)\)的做法。逆序对是大小关系,我们在小的那个数处统计每对逆序对,考虑从大到小插入每一个数,这样所有数都比他大,这样它插入在第\(i\)个就会产生\(i\)个逆序对,假设现在有\(x\)个数则它可以产生\([0,x]\)中个逆序对,且每种都恰好有一种插法。那么我们现在......
  • 题解:P10639 BZOJ4695 最佳女选手
    区间最值操作基础题,但是有点码农。依然考虑势能线段树,维护区间和\(\textrm{sum}\)、最大值\(\textrm{M1}\)、次大值\(\textrm{M2}\)、最大值个数\(\textrm{Mcnt}\)、最小值\(\textrm{m1}\)、次小值\(\textrm{m2}\)、最小值个数\(\textrm{mcnt}\),另外需要区间加标记\(\tex......
  • 【题解】CF1949B | 二分答案 霍尔定理
    本题可以做到低于\(O(n^2)\)。最大化最小值,考虑二分答案\(v\)变为检查可行性:每个主菜匹配的开胃菜的两个值都要在\((-\infty,x-v],[x+v,+\infty]\)间选取,问是否存在主菜与开胃菜的完美匹配。对开胃菜排序,得到第\(i\)个主菜可以匹配到的开胃菜集合为一个后缀和一个前缀:\([......
  • 题解:CF1829H Don't Blame Me
    动态规划好题。对于此题解,不懂的问题可以私信笔者。前置知识解题方法用\(dp_{i,j}\)表示前\(i\)个数选择了若干个数按位与之后为\(j\)的子序列个数。接下来思考转移。想到这里,你会发现按位与没有逆运算,一次我们要正推,例如\(f_{i+2}=f_{i}+f_{i+1}\)。那么转移方程不......
  • [题解]P3391 文艺平衡树 - Splay解法
    P3391【模板】文艺平衡树给定序列\(1,2,\dots,n\),接下来\(m\)次操作,每次操作给定\(l,r\),你需要翻转\([l,r]\)。所有操作结束后,请输出这个序列。我们先从“普通平衡树”这一题出发,思考一下Splay操作的本质。我们把一个节点Splay到根节点后,中序遍历在自己前面的节点都在左边,中......
  • 冒泡排序程序
    #include<stdio.h>voidbubbleSort(intarr[],intsize){for(inti=0;i<size-1;i++){for(intj=0;j<size-1-i;j++)//每次将最大值放到最后所以会少i{if(arr[j]>arr[j+1]){......
  • CF484E 题解
    很好的数据结构题,加深了蒟蒻对于可持久化线段树的理解。题意给定一个序列\(\{a_n\}\)(\(1\len\le10^5,1\lea_i\le10^9\)),有\(m\)($\lem\le10^5$)个询问,每次询问给出\(l,r,k\),表示询问区间\([l,r]\)里长度为\(k\)的子区间的最小值最大是多少。题......
  • CF166D 题解
    看到其它题解代码颇长,蒟蒻在此贡献一个二分图最大匹配的解法。题意鞋店里有\(n\)(\(1\len\le10^5\))双鞋子,第\(i\)双鞋子有价格\(c_i\)与尺码\(s_i\)(\(1\lec_i,s_i\le10^9\)),保证\(s_i\)互不相同。有\(m\)(\(1\lem\le10^5\))位顾客光临,第\(......
  • SOLIDWORKS常见使用问题解决方案 慧德敏学
    本文Solidkits为大家分享SOLIDWORKS常见使用问题解决方案,让我们一起学习,使设计工作效率更高。1、如何隐藏装配体里头的零件?—右键点击零件或者树状图中的零件名字,然后点眼睛那个图标。更快捷的方式,只需要把鼠标放到那个零件上,按一下Tab,隐藏了。2、如何恢复隐藏装配体里头的零......