欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

G-数据结构-G

最编程 2024-10-16 10:46:44
...

T1 距离

image

首先这题部分分很多,直接 $ O (n^2) $ 枚举点对,在树上差分即可获得 70 分。

那么正解几乎和部分分就没什么关系了。

首先看到

\[ans_u = \sum_{x ∈ subtree_u} \sum_{y ∈ subtree_u} {\min{ (\vert a_x - a_y \vert , \vert b_x - b_y \vert ) }} \]

中带了一个 $ min $ 的操作,这让我们很不好用数据结构来维护,所以这个时候就得转化题意。

\[a+b = \min { (a,b) } + \max { (a,b) } \]

这个式子是显而易见的,那么通过这个式子我们就可以将 $ \min $ 操作转换为 $ \max $ 操作和简单求和操作。

但是我们转了个dan啊,取 $ min $ 和 取 $ max $ 不是一样难以维护吗。

你说得对,但是,取 $ max $ 操作还可以再次进行转换。

在原本问题中,一个特征值为 $ a_i , b_i $ 的点,可以映射到平面直角坐标系上的一个点 $ (a_i,b_i) $ ,那么两个点 $ (a_i,b_i) $ 和 $ (a_j,b_j) $ 之间的贡献就是 $ \min{(\vert a_i - a_j \vert , \vert b_i - b_j \vert)} $ ,也就是 $ \vert {a_i - a_j} \vert + \vert {b_i - b_j} \vert - \max{(\vert a_i - a_j \vert , \vert b_i - b_j \vert)} $ 。

那么 $ \max{(\vert a_i - a_j \vert , \vert b_i - b_j \vert)} $ 就是 切比雪夫距离

学习切比雪夫距离可看这篇博客

然后人类(反正不是我)发现 切比雪夫距离可以转化为曼哈顿距离 ,也就意味着可以将 取 $ max $ 操作转化为 绝对值求和操作,那么整道题就可以转化为 4个绝对值求和操作 。

怎么转呢?

我们通过图像来看,这是平面直角坐标系上所有与原点的切比雪夫距离为 1 的点:

image

一个边长为 2 的正方形的四条边。

然后我们在看看平面直角坐标系上所有与原点的曼哈顿距离为 1 的点:

image

一个边长为 $ \sqrt 2 $ 的正方形的四条边。

既然都是正方形,那么我给他转一下,然后再将边长乘上 $ \frac{\sqrt{2}}{2} $ 即可。

按理来说矩阵就是用来将一个坐标系旋转的,但是我根本不会好吧。

而且因为这是二维的,我们可以用虚数导一下。

$ x + y i $ 表示点 $ (x,y) $ ,一个虚数 乘上一个 虚数 的含义就是:两者的模长相乘,辐角主值相加。

所以将一个二维点进行旋转可以用虚数来导。那么将 $ (x,y) $ 逆时针旋转 45 °,再乘以 $ \frac{\sqrt{2}}{2} $ ,就相当于 乘上 $ \frac{1}{2} + \frac{1}{2} i $ 。点 $ (x,y) $ 也就变成了 $ (\frac{x-y}{2} , \frac{x+y}{2} ) $ 。

当然你旋转 45°、135°、-45°、-135° 都可以,一般会把 $ (x,y) $ 转化为 $ (\frac{x+y}{2} , \frac{x-y}{2} ) $。

接下来呢,设 $ a1_i = \frac{a_i + b_i}{2} , b1_i = \frac{a_i - b_i}{2} $,整道题都转化为了一个式子:

\[ans_u = \sum_{x ∈ subtree} \sum_{y ∈ subtree} \vert a_i - a_j \vert + \vert b_i - b_j \vert - \vert a1_i - a1_j \vert - \vert b1_i - b1_j \vert \]

也就是维护 四个 绝对值求和。

然后这玩意可以分治计算,具体来说,对于 $ ans[1,n] $ (此处为值域)来说,可以分为两点都在中点的同一侧,和两点在中点的异侧,即:

\[ans[1,n] = ans[1,mid] + ans[mid+1][n] + cnt[1,mid] \times sum[mid+1][n] - cnt[mid+1][n] \times sum[1,mid] \]

直接用线段树维护即可,合并时直接合并,不过需要改写 $ push_up $ 函数。

时间复杂度 $ O (nlogn) $ ,但是常数巨大。

听wkh讲可以学习一下 $ FHQ treap $ 的有交集合并,对于这道题也是 $ O (n log n) $ 的,但是为什么他是最优解啊。

\[END \ \ \ OF \ \ \ T1 \]

\[\]

\[\]

\[\]