首页 > 其他分享 >CF1830E Bully Sort

CF1830E Bully Sort

时间:2023-06-15 20:22:55浏览次数:31  
标签:Sort Bully ip 交换 leq CF1830E 逆序

题面传送门

我们考虑选中的 \(i\),这个位置一定是 \(p_i>i\),它想要往后走。而和它交换的 \(j\),因为 \(\leq i\) 的有 \(i\) 个数,现在第 \(i\) 个位置已经被 \(p_i\) 占据了,所以 \(\leq i\) 的至少有一个在 \(i\) 后面所以和 \(p_i\) 交换的 \(p_j\) 一定 \(\leq i\),也就是说,我们选中的 \(j\) 一定满足 \(p_j<j\)。

这启发我们将数分成两类,\(p_i>i\) 的和 \(p_i<i\) 的,交换只会在这两者之间进行。假设所有 \(p_i>i\) 的同时开始向右跑,所有 \(p_i<i\) 的同时开始向左跑,那么每对之间都会交换一次,总次数是不同类之间的逆序对数量。现在每类之间有先后交换的顺序,就考虑它的影响。对于两个属于第一类的 \(i,j,i<j\),如果 \(p_i>p_j\),那么 \(p_i\) 要比 \(p_j\) 先移动,并且必定恰好有一次是 \(p_i\) 原来在 \(p_j\) 左边,交换完之后到了 \(p_j\) 右边,使得有一个原来可以和 \(p_j\) 交换的二类不能和 \(p_j\) 交换,因此总的次数要减去一类间的逆序对,同理也要减去二类间的逆序对。

到这里已经可以做了,但是我们强行划分成两类不别扭吗?实际上稍微推一下式子就可以得到它其实是 \(\sum\limits_{i=1}^{n}{|i-p_i|}-\sum\limits_{i<j}[p_i>p_j]\),于是就挺优美的。

submission

标签:Sort,Bully,ip,交换,leq,CF1830E,逆序
From: https://www.cnblogs.com/275307894a/p/17484030.html

相关文章

  • MATLAB技巧——sort和sortrows函数
    1、sort函数sort函数用于对数据进行排序,通过helpsort命令,可以查找到sort函数的具体用法:Y=SORT(X,DIM,MODE)hastwooptionalparameters.DIMselectsadimensionalongwhichtosort.MODEselectsthedirectionofthesort'ascend'resultsinascendingorder......
  • python高阶函数filter、sorted学习笔记
    filterPython内建的filter()函数用于过滤序列。和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。e.g在一个list中,删掉偶数,只保留奇数,可以这么写:点击查看代码de......
  • Remove Duplicates from Sorted Array
    Example1:Input:nums=[1,1,2]Output:2,nums=[1,2,_]Explanation:Yourfunctionshouldreturnk=2,withthefirsttwoelementsofnumsbeing1and2respectively.Itdoesnotmatterwhatyouleavebeyondthereturnedk(hencetheyareunderscores)......
  • HDU 2838 Cow Sorting(树状数组)
    题意:首先每次只能交换相邻的两头牛,并且最后要求升序排列,所以最后整个序列的逆序是0,每次交换只可以消除1个逆序。(令a[i]的逆序是从1到i-1比它大的数的个数。)思路:对于某个数,要把它变成有序的,那么很容易可以推算出公式就是它自身的逆序数乘自身的值再加上它的逆序数的和,自己算算看看。......
  • linux sort,uniq,cut,wc命令详解
        sortsort命令对File参数指定的文件中的行排序,并将结果写到标准输出。如果File参数指定多个文件,那么sort命令将这些文件连接起来,并当作一个文件进行排序。sort语法[root@www~]#sort[-fbMnrtuk][fileorstdin]选项与参数:-f:忽略大小写的差异,例如A与......
  • Cassandra 的数据存储结构——本质是SortedMap<RowKey, SortedMap<ColumnKey, ColumnV
    Cassandra的数据存储结构Cassandra的数据模型是基于列族(ColumnFamily)的四维或五维模型。它借鉴了Amazon的Dynamo和Google'sBigTable的数据结构和功能特点,采用Memtable和SSTable的方式进行存储。在Cassandra写入数据之前,需要先记录日志(CommitLog),然后数据开始写......
  • [Codeforces Round 876 (Div. 2)][Codeforces 1839D. Ball Sorting]
    题目链接:D-BallSorting题目大意:需要对一个排列按照指定操作进行排序。操作一:在数字间插入一个特殊点,可执行不超过\(k\)次;操作二:将在特殊点旁的数移动到任意位置。所有操作结束后特殊点会消失,要求对所有\(k\in[1,n]\),求出操作二的最少操作次数。分析题意可以得出,操作一放......
  • js数组sort方法排序
    数组的sort方法可以对数组进行排序,默认是按照字符编码的顺序进行排序,可以自定义规则。sort方法会修改原数组。自定义规则简述:比较函数两个参数a和b,(a是b的后一个元素),返回a-b升序,返回b-a降序。letarr=[3,5,2,9,1];arr.sort();//默认升序arr.sort((a,b)=>{//......
  • [LeetCode] 1351. Count Negative Numbers in a Sorted Matrix
    Givena mxn matrix grid whichissortedinnon-increasingorderbothrow-wiseandcolumn-wise,return thenumberof negative numbersin grid.Example1:Input:grid=[[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]]Output:8Explanation:Thereare......
  • 【leetcode】21. Merge Two Sorted Lists
    将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例1:输入:l1=[1,2,4],l2=[1,3,4]输出:[1,1,2,3,4,4]示例2:输入:l1=[],l2=[]输出:[]示例3:输入:l1=[],l2=[0]输出:[0]提示:两个链表的节点数目范围是[0,......