P3644 - 八邻旁之桥 题解
作者:互联网
首先注意到家和办公室在河同侧的是方案唯一的(就直接走),先算到答案里面去。然后剩下来的都是被分在两岸的。
显然两岸哪个是家哪个是办公室不重要。我们设它们的位置为 \(l\leq r\)。于是如果通过的桥为 \(a\),不难列出走的路程的式子 \(|l-a|+|r-a|+1\)(我当时就是没想到把式子列出来,进一步通过 \(+\) 号拆成两个独立的元素,而想着以家、办公室的对为最小元素做,这显然是麻烦的),其中这个 \(1\) 也可以预处理掉,剩下两个绝对值之和。
对 \(m\) 分类:
-
\(m=1\)。这个其实简单至极,就算不列式也可以轻松做。不过我们已经把式子列出来了,那就照这个思路做吧。我们设这条唯一的桥为 \(a\),那么答案就是 \(\sum(|l_i-a|+|r_i-a|)\),不难发现 \(\sum\) 后面的两项也是独立的(这是本题的关键),于是拆开,拆成 \(2n\) 个 \(|x-a|\) 的和。那么根据初一数学我们知道 \(a\) 取 \(x\) 的中位数的时候最优;
-
\(m=2\)。依然沿用上面的思路,只不过对于桥 \(a<b\) 每个人可以有两种决策(目前为止还不能拆开,因为家和办公室的决策必须相同)。我们考虑对 \(l,r\),\(a\) 和 \(b\) 哪个更优呢?分成四类(\(l\) 与 \(a\) 的关系、\(r\) 与 \(b\) 的关系)不难列出条件式:\(l\) 更优当且仅当 \(l-a\leq b-r\)。移项得 \(l+r\leq a+b\)。这样子就是一个关于 \(l_i+r_i\) 的不等式。于是又有了一个结论:按 \(l+r\) 排序后,选左边桥的一定是个前缀,于是选右边桥的是后缀。于是我们考虑惯用套路:枚举这个断点。
断点两边显然是独立的。对于每边,这时候可以将绝对值拆开了,归约到了 \(m=1\) 的时候。于是现在问题就是如何快速求出每个前缀的中位数(又暴露了 APIO 的毒瘤 DS 本质)。显然要从左往右依次加入数。那么维护这个傻子都能想到平衡树,但是 hb 沥尽心血教我们如何不用平衡树、线段树等数据结构,我们也不能辜负他的期望。这个插入数、查 xth 显然离散化然后值域 BIT 倍增也可以。还有一种更简便的方法:维护左右两半的
set
,每次插入后调整一下左右两边的相对单调性,然后微调一下两边的元素个数平衡即可,这个还是挺自然的。
标签:拆成,题解,P3644,中位数,显然,八邻,列出来,sum,式子 来源: https://www.cnblogs.com/ycx-akioi/p/solution-p3644.html