\[\huge 近日多做数据结构题,或恐后再读不能醒悟,或记其思路,或骂出题人,或不想刷题,虽有此篇。 \]\[\]\[\]\[\]\[\]
T1 距离
首先这题部分分很多,直接 $ 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 的点:
一个边长为 2 的正方形的四条边。
然后我们在看看平面直角坐标系上所有与原点的曼哈顿距离为 1 的点:
一个边长为 $ \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 \]\[\]\[\]\[\] 标签:frac,vert,min,max,sum,ans,数据结构 From: https://www.cnblogs.com/GGrun-sum/p/18469182