首页 > 其他分享 >Slope Trick

Slope Trick

时间:2024-12-23 17:57:46浏览次数:6  
标签:Slope qu 函数 最大值 凸函数 Trick 斜率 我们

参考

例题

P4597。

分析

很显然的,我们可以得到一个 \(O(n^2)\) 的 DP 做法。定义状态函数 \(f_{i,j}\) 表示前 \(i\) 个数,\(a_i=b_j\) 的最小操作次数。其中 \(b\) 为原序列排序去重的结果。那么有转移方程:\(f_{i,j}=\min\limits_{k=1}^{j} f_{i-1,k}+|b_j-a_i|\)。

不难发现,我们的 \(f(i,j)\) 是一个凸函数。因为对于 \(j\) 的增加,我们有 \(f_{i,j}\le f_{i,j-1}\),证明略。而对于形如 \(g(x)=|x-a|\) 的函数,也是一个凸函数。对于一个凸函数 \(f(x),x \in \{a_i\}\),我们用 \(a_i\) 来表示。具体的,当 \(f(a_i)\) 与 \(f(a_{i+1})\) 之间的斜率为 \(k\) 时,我们可以用 \(k+1\) 个 \(a_i\) 来表示在 \(a_i\) 到 \(a_{i+1}\) 的过程中,斜率增加量为 \(k\)。其中第 \(1\) 个 \(a_i\) 表示了这个点。这样,我们就直接把这个凸函数的形状表示出来了,只需要知道任意一个 \(f(x)\) 的值就能得到所有函数值。

那么对于这道题,斜率 \(k\) 的最大值为 \(0\),因为我们取了前缀 \(\min\)。那么由于两个凸函数相加的结果为凸函数,则可以直接通过插入 \(a_i\) 的方式更新函数的表示。如果我们 \(a_i\) 这个点对应的更新之前的函数是在一个相邻斜率为 \(0\) 的区间内,则插入单点 \(a_i\) 就能表示。如果不是,那么在 \(a_i\) 之前的点斜率减少 \(1\),之后的斜率增加 \(1\),再与 \(0\) 取最小值。我们控制前面的斜率不变,则能够用 \(2\) 个 \(a_i\) 表示出斜率加 \(1\)。而加 \(1\) 之后的分界点(之后的点斜率大于 \(0\))就是当前所有 \(a_i\) 中的最大值了。(貌似是的?)那么我们就只需要将最大值删除,再加入 \(2\) 个 \(a_i\) 来更新形状。

对于这道题,不难发现答案就是维护出的函数中,斜率为 \(0\) 时的纵坐标。那么对于斜率变化的情况,我们的纵坐标相当于是整体加上了最大值减去 \(a_i\)。斜率不变的情况不变。维护插入、删除、最大值可以直接使用优先队列。时间复杂度 \(O(n\log n)\)。

代码

	for(re int i=1;i<=n;++i){
		if(!qu.empty()&&qu.top()>a[i]) ans+=qu.top()-a[i],qu.pop(),qu.push(a[i]);
		qu.push(a[i]);
	} 

标签:Slope,qu,函数,最大值,凸函数,Trick,斜率,我们
From: https://www.cnblogs.com/harmisyz/p/18624703

相关文章

  • Word中写论文的一些小trick
    目录加图注使用latex|matjax语法打公式给公式加上编号引用文献加图注这样就给图片插入图注使用latex|matjax语法打公式按下alt+=会出现下面的情景在右上角选择专业然后就可以在里面打入latex或mathjax了,不过这个没有预览功能,可以在别的有预览功能的地方打好直接粘贴......
  • CF868F Yet Another Minimization Problem (四边形不等式 trick)
    题意:给定序列,把序列分成\(k\)段,使每一段相同元素对数之和最小。\(n\le10^5,k\le20,a_i\len\)。容易写出转移方程:\(dp[i][j]=\min_{k=1}^{i}(dp[k-1][j-1]+w(k,i))\),其中\(w(k,i)\)表示\(a_k\sima_i\)的相同元素对数。第一想法是wqs二分,然后发现\(w(k,i)\)实在太......
  • 背包 dp 一些小 trick 的记录
    前言学习背包dp,遇到了一些觉得有典型性的一些题目,故记录在此,方便以后查看。如果以后发现有价值的会更新。P1417烹调方案01背包。特殊点:物品的价值在动态变化,物品\(1\)在物品\(2\)前先做不一定更优,即无后效性。但由于价值的变化满足式子\(a_i-t\timesb_i\),那么对......
  • [Tricks-00006]CF1558E 如何处理无向图中的任意环?tourist 题,太神啦。
    题意:自己看去。不过有个限制别忘了:每个点的度数都至少为\(\geq2\)。我写这些Trick题解还是要说清思考方法。不过这个题确实有点难以观察到了/ll还是从简单到难地去讲吧:第一件事。如果没有后面那个不能返回的条件的限制。那么其实可能有很多种想法,不过大体思路都是统一的:每......
  • [Tricks-00005][NOIp2024]树上查询 思维方式还是要数形结合!
    题目链接。有一个经典结论是,在\(l<r\)的时候,\(dep_{\operatorname{LCA}(l,l+1,\dots,r)}=\min\limits_{i=l}^{r-1}dep_{\operatorname{LCA}(i,i+1)}\),证明也十分容易。特判掉\(k=1\)的特殊情况后,问题则可以转化成:有一个序列\(d_i=dep_{\operatorname{LCA}(i,i+1)}\),求\(\m......
  • Tricks
    记录做题时的一些有趣Tricks\(\text{Prob.1}\)P3674小清新人渣的本愿奇奇妙妙角色关系图算法:莫队、\(\text{bitset}\)思路令\(S=10^5\)考虑使用\(\text{bitset}\)来\(O(1)\)维护当前区间出现的数令\(u,v\)两个\(\text{bitset}\)分别维护\(x,S-x\)是否在区间......
  • Trick 不完全整理
    读题读题再读题,观察观察再观察,手模手模再手模别怕麻烦,遗漏关键性质会悔恨终生退一步有时能够更好的进一步杂项一定按着某一标准划分阶段/部分来讨论,不要怕麻烦否则更容易走弯路只要求部分“格式相同”的信息都可以用例如哈希/离散化的技巧将信息一般化后统一处理注意......
  • [笔记]Important Tricks And Lemmas
    图论对于图路径的构造,常常思考是否可以对叶子节点进行某种配对。按照dfs序对节点进行配对是考虑的方向之一。例题P7320「PMOI-4」可怜的团主,P4665[BalticOI2015]。树上路径的交是路径。路径满足边数等于点数\(-1\),通常可以做某些神秘容斥。例题:2024省选集训Day8B......
  • Trick-整除分块(数论分块)
    整除分块:对于类似于\(solve_{d=1}^{n}(\frac{n}{d})\)的式子,\(\frac{n}{d}\)的值的个数不超过\(\sqrtn\)个(下面有证明),故可以对于每一个结果去计算其贡献。代码如下:voidcalc(intn){for(intl=1,r;l<=n;l=r+1){r=n/(n/l);//d在区间[l,r]的n......
  • CTF 的基础知识 & 题型 & Trick总结
    references:12webphp语法基础references:1php脚本的基本格式:<?php//codinghere?>php代码同样以;结尾。php文件的后缀名大多是php,也有诸如php5php4phps之类,如果普通的后缀名被拦截不妨试试其他的。php变量用$来定义,大小写敏感,但是不用声明数据类型......