AT_abc253_d

思路

容斥原理:

\(1\) 加到 \(n\) 的和去掉其中是 \(a\) 的倍数的总和,再去掉其中是 \(b\) 的倍数的总和,这时候我们多减去了其中是 \(\operatorname{lcm}(a,b)\) 的倍数的总和。

那么答案为:

\((\sum_{i = 1}^{n} i) - (a + 2 \times a + \dots + \lfloor \frac{n}{a} \rfloor \times a) - (b + 2 \times b + \dots + \lfloor \frac{n}{b} \rfloor \times b) + (\operatorname{lcm}(a, b) + 2 \times \operatorname{lcm}(a, b) + \dots + \lfloor \frac{n}{\operatorname{lcm}(a, b)} \rfloor \times \operatorname{lcm}(a, b))\)

AT_abc255_c

由于这个等差数列末项最大是 \(2 \times 10^{18}\),不会爆 long long

我们定义 \(f(s) = |x - a + (s - 1) \times d|\),那么他的函数图像是一个单峰的。

我们可以根据函数图像中的最值划分成两个函数图像,这样就可以用二分做了,此题结束。

AT_abc255_d

简化题意:

给定序列 \(A\),进行 \(q\) 次操作,每次操作给定整数 \(x\),请你输出输出 \(\sum _{i = 1} ^ {i = n} |x - A_i|\)

绝对值化简:

\(|x - A_i| = \left\{ \begin{aligned} & x - A_i & x \ge A_i & \cr & A_i - x & x < A_i & \cr \end{aligned} \right.\)

如果对 \(A\) 序列进行排序,则 \(x < A_i\) 是一段连续的部分,\(x \ge A_i\) 也是一段连续的部分,那么做法出来了:

先对 \(A\) 序列排序,再对排序后的 \(A\) 数组做一遍前缀和,那么令 \(v\) 为第一个大于等于 \(x\) 的位置,则答案为: \((v - 1) \times x - s_{v - 1} + (s_n - s_{v - 1}) - (n - v + 1) \times x\)

AT_abc255_f

还原二叉树。

若当前子树的根不在中序遍历的区间内,则没有合法的二叉树。

注意:题目要求构造出的树根为 \(1\)

AT_abc256_d

合并可以合并的区间。

最后输出合并好的区间。

对区间按关键字排序,按关键字排序后,可以想到能合并的区间是连续的一段。

posted on 2024-01-09 16:42  appear  阅读(10)  评论(0)    收藏  举报