[CF671D]Roads in Yusland(贪心,左偏树) 题面 洛谷 CF 题解 无解的情况随便怎么搞搞提前处理掉. 通过严密(大雾)地推导后,发现问题可以转化成这个问题: 给定一棵树,每条边可以被标记若干次,有若干个限制,每次限制一条链上所有边被覆盖的总次数不能超过一个给定值,现在要最大化边被覆盖的总次数. 不难发现转化出来的问题可以贪心来做,即一条边在满足所有限制的情况下,选择其能够被覆盖的最多次数一定不会更差,所以只要能覆盖就覆盖. 那么拿左偏树进行堆的合并就可以很容易的从下往上维…
[题目大意] 给定一个序列t1,t2,...,tn ,求一个递增序列z1<z2<...<zn , 使得R=|t1−z1|+|t2−z2|+...+|tn−zn| 的值最小.本题中,我们只需要求出这个最小的R值. [思路] -这个比加延迟标记的左偏树调试得还久……WA到死…… 如果ti是递增的,我们只需要取zi=ti: 如果ti是递减的,我们只需要取ti的中位数. 所以我们将ti分割成若干个区间,维护每个区间的中位数.对于[L,R]的区间,我们存放[L,(L+R)/2]在堆中.具体如下操作…
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=1367 题解 先考虑条件为要求不下降序列(不是递增)的情况. 那么考虑一段数值相同的子段,这一段相同的数值显然应该是原序列 \(t\) 中对应的位置上的数的中位数. (不是中位数答案一定比中位数大) 所以问题转化为划分成很多段,每一段的权值是中位数,要求权值不下降. 对于一段,每一次往前扫,只要前面的中位数比它大,那么就合并. 可以用可并堆维护每一段,只保留中位数以下的数.合并左偏树实现即可.…
这道题哪里都找不到. [问题描述] 给定一个整数序列a1, a2, … , an,求一个不下降序列b1 ≤ b2 ≤ … ≤ bn,使得数列{ai}和{bi}的各项之差的绝对值之和 |a1 - b1| + |a2 - b2| + … + |an - bn| 最小. [数据规模] 1 ≤ n ≤ 106, 0 ≤ ai ≤ 2*109     这道题很有趣,值得一做.     我们对于这种题目,要有有效的思维方式.     ①:考虑最终的答案数列B,它能够看成是很多段相同的数段连接而成的,构成一个…
题面 Description 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.在这个帮派里,有一名忍者被称之为 Master.除了 Master以外,每名忍者都有且仅有一个上级.为保密,同时增强忍者们的领导力,所有与他们工作相关的指令总是由上级发送给他的直接下属,而不允许通过其他的方式发送.现在你要招募一批忍者,并把它们派遣给顾客.你需要为每个被派遣的忍者 支付一定的薪水,同时使得支付的薪水总额不超过你的预算.另外,为了发送指令,你需要选择一名忍者作为管理者,要求这个…
[Apio2012]dispatching Description 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.在这个帮派里,有一名忍者被称之为 Master.除了 Master以外,每名忍者都有且仅有一个上级.为保密,同时增强忍者们的领导力,所有与他们工作相关的指令总是由上级发送给他的直接下属,而不允许通过其他的方式发送.现在你要招募一批忍者,并把它们派遣给顾客.你需要为每个被派遣的忍者 支付一定的薪水,同时使得支付的薪水总额不超过你的预算.另外,为了发送指令,…
Preface 可并堆,一个听起来很NB的数据结构,实际上比一般的堆就多了一个合并的操作. 考虑一般的堆合并时,当我们合并时只能暴力把一个堆里的元素一个一个插入另一个堆里,这样复杂度将达到\(\log(|A|)+\log(|B|)\),极限数据下显然是要T爆的. 所以我们考虑使用一种性价比最高的可并堆--左偏树,它的思想以及代码都挺简单而且效率也不错. 学习和参考自这里 What is Leftist Tree 左偏树,顾名思义就是像左偏的树,但是这样抽象的表述肯定是不符合我们学OI的人的背板子…
题目传送门 逃跑的Barn 题目描述 It's milking time at Farmer John's farm, but the cows have all run away! Farmer John needs to round them all up, and needs your help in the search. FJ's farm is a series of N (1 <= N <= 200,000) pastures numbered 1...N connected b…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2809 思路有点暴力和贪心,就是 dfs 枚举每个点作为管理者: 当然它的子树中派遣出去的忍者越多越好,只要不超过预算: 所以需要能够合并子树情况的.能反映最大值节点的数据结构,也就是左偏树(可并堆): 所以对于每个点维护一个大根左偏树,当子树内总和超过预算时,就去掉大根堆堆顶,这样最优: 自己的第一棵左偏树!没想到相当简单呢. 左偏树的论文:https://wenku.baidu.com/…
P1552 [APIO2012]派遣 题面 考虑枚举每个节点作为管理者,计算所获得的满意程度以更新答案.对于每个节点的计算,贪心,维护一个大根堆,每次弹出薪水最大的人.这里注意,一旦一个人被弹出,那么不再可能出现在其祖先们的最优解里(废话),所以使用可并堆左偏树优化复杂度. #include <cstdio> #include <algorithm> #define MAXN 100010 #define MAX(A,B) ((A)>(B)?(A):(B)) #define…