CF295E Yaroslav and Points
题目描述
Yaroslav 有 $n$ 个点,这些点都位于 $Ox$ 轴上。第 $1$ 个点的坐标为 $x_1$,第 $2$ 个点的坐标为 $x_2$,……,第 $n$ 个点的坐标为 $x_n$。现在 Yaroslav 想要执行 $m$ 个操作,每个操作有以下两种类型之一:
1. 将第 $p_j$ 个点从位置 $x_{p_j}$ 移动到 $x_{p_j} + d_j$。保证执行此操作后,所有点的坐标仍然各不相同。
2. 计算所有位于区间 $[l_j, r_j]$ 上的点的两两距离之和。换句话说,你需要计算如下和:
$$
\sum_{l_j \leq x_a < x_b \leq r_j}\, (x_b - x_a)
$$
(只对那些坐标在 $[l_j, r_j]$ 的点 $x_a$、$x_b$ 计算且 $x_a
输入格式
第一行包含一个整数 $n$,表示点的数量 $(1 \leq n \leq 10^{5})$。
第二行包含 $n$ 个互不相同的整数 $x_1, x_2, ..., x_n$,表示每个点的坐标 $(-10^9 \leq x_i \leq 10^9)$。
第三行包含一个整数 $m$,表示操作数量 $(1 \leq m \leq 10^5)$。
接下来 $m$ 行,每行描述一个操作。第 $j$ 行首先包含一个整数 $t_j\ (1 \leq t_j \leq 2)$,表示操作类型。
- 如果 $t_j=1$,后面跟着两个整数 $p_j$ 和 $d_j$ $(1 \leq p_j \leq n,\, |d_j| \leq 1000)$,表示将第 $p_j$ 个点的坐标加上 $d_j$。
- 如果 $t_j=2$,后面跟着两个整数 $l_j$ 和 $r_j$ $(-10^9 \leq l_j \leq r_j \leq 10^9)$,表示询问有多少对点所有坐标都在 $[l_j, r_j]$ 区间内,并求出这些点之间两两距离之和。
保证在任意时刻,所有点的坐标都不相同。
输出格式
对于每个类型 $2$ 的查询,输出一行结果,顺序与输入中的查询顺序一致。
请不要在 C++ 中使用 `%lld` 读取或输出 64 位整数。建议使用 `cin`、`cout` 流或 `%I64d` 格式符。
说明/提示
由 ChatGPT 5 翻译