首页 > 其他分享 >CF1844F Min Cost Permutation

CF1844F Min Cost Permutation

时间:2023-07-14 19:55:18浏览次数:38  
标签:set Permutation CF1844F 最小值 Cost Delta 字典 从小到大 顺序

题面传送门

先不考虑字典序的问题,只考虑最小值怎么求。

先考虑一个特殊情况:\(c=0\),也就是说我想要相邻两项之差的绝对值最小。那么将其从小到大排序以后就满足要求。

我们猜想实际上更一般的情况不会和这个差太多。不妨令 \(c>0\),实际上最小值就在升序排列的时候取到。

假设有四个升序排列的数,其差值设为 \(\Delta_1,\Delta_2,\Delta_3\),那么一定是按照从小到大的顺序选择。

假设以 \(1324\) 的顺序选择,那么价值为 \(|\Delta_1+\Delta_2-c|+\Delta_2+c+|\Delta_3+\Delta_2-c|\),如果按照顺序选,那么就是 \(|\Delta_1-c|+|\Delta_2-c|+|\Delta_3-c|\)。

·分类讨论:若 \(c>\Delta_2\),则 \(|\Delta_2-c|\) 比 \(\Delta_2+c\) 少 \(2\Delta_2\),而剩下两项 \(1234\) 最多比 \(1324\) 多 \(2\Delta_2\)。

若 \(c\leq \Delta_2\),则 \(|\Delta_2-c|\) 比 \(\Delta_2+c\) 少 \(2c\),加入 \(\Delta_2\) 之后也是最多多 \(2c\)。因此按照顺序选都不会更劣。

所以我们已经可以确定最小值是什么了,现在来确定字典序最小的情况。

若 \(c\geq 0\),那么直接按照从小到大的顺序摆就是最小的,并且显然字典序最小。我们只需要考虑 \(c<0\) 的情况。在这样的情况中,从大到小摆肯定是值最小的,但是不一定字典序最小。

首先我们仍然可以证明:在给定前缀的情况下,后缀倒序摆放一定是最优的。

如果出现最终序列 \(b_i<b_{i+1}\) 的情况,那么\(b_{i+1}-b_i-c\) 会被全部算到最终答案中。若改变最终序列的顺序,那么 \(b_{i+1}-b_i\) 是不会改变的,但是会有若干个 \(\Delta\) 合并起来,若超过了 \(c\),就会使答案整体变大,不优。

这样就可以 \(O(1)\) check 了,需要检验 \(O(n^2)\) 次,可以通过 F1。

然后进一步考虑 check success 的充要条件。如果一个值是剩下的 \(\max\) 显然是成功的。

否则按照上面证明后缀倒序摆放的思路,你提前了一个数,那么这个数提前导致的 \(\Delta\) 合并不能超过 \(c\),这样才会使总答案不变。同时,你提前的这个数插在了原来的第 \(i-1\) 个位置和剩下的最大值之间,你需要保证 \(b_i\geq b_{i-1}+c\),才会使得答案不变。

所以可以用 set 维护 \(\Delta\) 的合并,然后再用一个 set 维护可以被提前的值,在 set 里面二分即可。时间复杂度 \(O(n\log n)\)。

submission

标签:set,Permutation,CF1844F,最小值,Cost,Delta,字典,从小到大,顺序
From: https://www.cnblogs.com/275307894a/p/17554870.html

相关文章

  • Atcoder Regular Contest 114 F - Permutation Division
    显然分成\(k\)段以后,最大化形成的排列的字典序的策略是将所有段按第一个元素的大小降序排列。由于最终排列的字典序肯定\(\ge\)原排列的字典序,因此我们考虑最大化最终排列与原排列的LCP,这部分就考虑二分答案,记\(dp_i\)表示以\(p_1\)开始\(p_i\)结尾的LDS的长度,那么......
  • CF1175F The Number of Subpermutations 对自己的警告--zhengjun
    太久没见过启发式合并了,然后没想出做法。首先笛卡尔树建出来。然后直接枚举跨过\(mid\)的长度为\(a_{mid}\)的区间,RMQ\(O(1)\)验证即可。发现这样的区间个数不超过左右区间大小的较小值,时间复杂度:\(O(n\logn)\)。代码#include<bits/stdc++.h>usingnamespacestd;us......
  • AtCoder Beginner Contest 309 G Ban Permutation
    洛谷传送门AtCoder传送门前置知识:[ARC132C]AlmostSorted看\(\geX\)不顺眼,怎么办呢!直接容斥!钦定\(j\)个位置满足\(|P_i-i|<X\),其余任意,就转化成了[ARC132C]AlmostSorted。具体一点就是,你设\(f_{i,j,S}\)表示前\(i\)位有\(j\)个位置满足\(|P_i-i|<......
  • Atcoder ARC159C Permutation Addition
    设\(s=\sum\limits_{i=1}^na_i\),考虑加上排列\(p\),那么\(s\leftarrows+\frac{n\times(n+1)}{2}\)。当有解时,因为\(a_i\)相等,所以有\(s\bmodn=0\)。考虑\(n\bmod2=1\)时,\(\frac{n\times(n+1)}{2}\bmodn=0\),所以\(s\bmodn=0\)时才会有解。......
  • next_permutation 函数
    next_permutation函数next_permutation是全排列函数。一、基本用法inta[];do{}while(next_permutation(a,a+n));二、例题[P1088[NOIP2004普及组]火星人]([P1088NOIP2004普及组]火星人-洛谷|计算机科学教育新生态(luogu.com.cn))#include<bits/stdc++.h......
  • OSPF_Type5_LSA_COST
    目录理论实验验证基础配置产生五类(默认开销type-2)修改(强制开销type-1)查看理论五类LSA默认有两种开销计算方法,(默认开销类型是tpye2)type1特点开销在OSPF域内不断增加type2默认开销类型是tpye2,默认就是这种的特点开销在OSPF域内会始终保持不变当我们引入路由时,默......
  • Cost Of Carry
     Definitionof'CostOfCarry'Costsincurredasaresultofaninvestmentposition.Thesecostscanincludefinancialcosts,suchastheinterestcostsonbonds,interestexpensesonmarginaccountsandinterestonloansusedtopurchaseasecu......
  • [CF1827F]Copium Permutation
    吓人题。一个显然的想法是对于\(k\),将贡献分为\(3\)类:\([1,k]\)子区间的贡献,\([k+1,n]\)子区间的贡献和跨过\(k\)的贡献。首先\([1,k]\)的贡献我们可以沿用PuddingMonsters的做法,从左往右枚举\(r\),统计\(r\)作为右端点的贡献。发现一个区间是Copium的当且仅......
  • 【每日一题】Problem 359B. Permutation
    原题解决思路虽然题解思路里写着\(dp\),但是还是用最简单的\(math\)方法写了找规律题:如果结果为\(0\),只需要每个\(a_{2i-1}-a_{i}\)同向即可,即都为整数或负数如果结果为\(2k\),则只需要任意一个\(|a_{2i-1}-a_{i}|\)的值为\(k\),且与其他的\(a_{2i-1}-a_{i}\)方向......
  • 1595. Minimum Cost to Connect Two Groups of Points] (Hard)
    Description1595.MinimumCosttoConnectTwoGroupsofPoints(Hard)Youaregiventwogroupsofpointswherethefirstgrouphassize1points,thesecondgrouphassize2points,andsize1>=size2.Thecostoftheconnectionbetweenanytwopointsar......