距离

给定平面上的 nn 个点, 求它们两两之间的切比雪夫距离之和。两点之间的切比雪夫距离定义为 max(x1x2,y1y2)\max \left(\left|x_{1}-x_{2}\right|,\left|y_{1}-y_{2}\right|\right)

曼哈顿距离为 x1x2y1y2|x_1 - x_2| |y_1-y_2|

那么,切比雪夫距离和曼哈顿距离是可以相互转换的。

  • (x,y)(x+y,xy)(x,y) \to (x + y, x- y) 将曼哈顿距离转换成了切比雪夫距离。
  • (x,y)(x+y2,xy2)(x,y) \to (\frac{x+y}{2}, \frac{x-y}{2}) 将切比雪夫距离转换成了曼哈顿距离。

可以说,遇到切比雪夫距离就把它转换成曼哈顿距离试一试,遇到曼哈顿距离就把它转换成切比雪夫距离试一试。常见的是将切比雪夫距离转换成曼哈顿距离,用前缀和做些事情。

x=x+y,y=xyx = x + y, y = x-y 那么将答案除以二就行。那么开始推式子

ans=i=1nj=i+1nxixj+yiyj=i=1nj=i+1nxixj+i=1nj=i+1nyiyj \begin{aligned} a n s &=\sum_{i=1}^{n} \sum_{j=i+1}^{n}\left|x_{i}-x_{j}\right|+\left|y_{i}-y_{j}\right| \\ &=\sum_{i=1}^{n} \sum_{j=i+1}^{n}\left|x_{i}-x_{j}\right|+\sum_{i=1}^{n} \sum_{j=i+1}^{n}\left|y_{i}-y_{j}\right| \end{aligned}

到现在 xxyy 已经独立,分开算即可,以 xx 为栗子,将 xx 从大到小排序来去掉绝对值

ans=i=1nj=i+1n(xixj)=(i=1nj=i+1nxi)(i=1nj=i+1nxj)=i=1n(ni)xii=1n(i1)xi=i=1n(n2i+1)xi \begin{aligned} a n s &=\sum_{i=1}^{n} \sum_{j=i+1}^{n}\left(x_{i}-x_{j}\right) \\ &=\left(\sum_{i=1}^{n} \sum_{j=i+1}^{n} x_{i}\right)-\left(\sum_{i=1}^{n} \sum_{j=i+1}^{n} x_{j}\right) \\ &=\sum_{i=1}^{n}(n-i) x_{i}-\sum_{i=1}^{n}(i-1) x_{i} \\ &=\sum_{i=1}^{n}(n-2 i+1) x_{i} \end{aligned}

时间复杂度 O(nlogn)O(n \log n),可以用基数排序做到线性。

因子

给定一个正整数 nn,每次选择当前 nn 的一个因子 aa 并将 nn 减去 aa,求至少操作几次才能让 n=1n = 1。多组询问。

询问数那么多,一般是 dp 预处理了。

fif_i 为把 ii 减到 11 的最少操作次数。转移比较简单

fi=minjifij+1 f_i = \min_{j|i} f_{i-j} + 1

jj 是因子,可以 n\sqrt{n} 枚举,用 PR 算法可以跑的更快。

给定一棵 nn 个点的树,定义 f(l,r)f(l, r) 为保留这棵树上所有编号在 llrr 之间的点的时候, 连通块的个数。求
i=1nj=infk(i,j)\sum_{i=1}^{n} \sum_{j=i}^{n} f^{k}(i, j)

1n100000,1k21\le n\le 100000,1\le k\le 2

求的其实是点数 - 边数。可以发现 k[1,2]k \in [1,2],那就分类讨论下

  • k=1k = 1

i=1nj=inu(l,r)v(l,r)=i=1nu(l,r)j=inv(l,r) \sum_{i=1}^{n} \sum_{j=i}^{n} u(l,r)-v(l,r) = \\ \sum_{i=1}^{n} u(l,r) - \sum_{j=i}^{n}v(l,r)

左边的式子找规律发现为 1,4,10,35,1,4,10,35,\cdots,用通项公式可以求出 an=n(n+1)(n+2)6a_n = \frac{n(n+1)(n+2)}{6}

再考虑边,对于每条边 (x,y)(x,y) 要求有多少个区间包括它,当然是选择的区间同时包括 x,yx,y 了。找规律可以发现是 x(ny+1)x(n-y+1)

其实 k=2k=2 的做法完全可以做 k=1k=1,不过学下这个思路也不错。

  • k=2k=2

考虑枚举一个左端点,统计右端点的贡献,所以让左端点从右向左枚举

20ZR暑期联赛班 Day 2

所以维护一棵平方和的线段树即可 Link

相关文章: