P12091 [RMI 2019] 圣诞老人 / Santa Claus
题目描述
众所周知,在平安夜,圣诞老人的工作是从精灵那里获取礼物,并将它们送给孩子们,为他们的内心带来欢乐与幸福。
城市中有 $N$ 座房子在笔直的道路上。房子编号从 $1\sim N$。
对于每座房子 $i$,已知:
- $X_i$:$X_i$ 表示第 $i$ 座房子沿道路的位置。
- $H_i\in \{0,1\}$;
- $V_i$。
- 如果 $H_i = 0$,则第 $i$ 座房子中有一个精灵,持有一个价值为 $V_i$ 的礼物。
- 如果 $H_i = 1$,则第 $i$ 座房子中有一个孩子,正在等待一个最小价值为 $V_i$ 的礼物。
共有 $N$ 个场景。在第 $i$ 个场景中,圣诞老人从坐标 $0$ 进入城市,携带一个空的礼物袋。他首先向右移动,直到到达第 $i$ 座房子(位于坐标 $X_i$),然后向左移动,直到到达某个其他位置 $X_{\text{left}_i} \leq X_i$。
- 当圣诞老人经过一个精灵的房子且之前未访问过时,他会拿走礼物并放入袋中。
- 当圣诞老人经过一个尚未收到礼物的孩子的房子时,他**可以**(但不必须)从袋中挑选一个当前存在的礼物交给孩子,并将该礼物从袋中移除。此操作仅在所选礼物的价值**至少等于**孩子指定的最小价值 $V$ 时才能完成。
在第 $i$ 个场景中,圣诞老人移动的总距离为 $D_i = 2X_i - X_{\text{left}_i}$。你的任务是:针对每个场景,找到圣诞老人分发所有精灵礼物所需的最小距离 $D_i$。
- 注意:允许某些孩子未收到礼物,但必须满足所有礼物已被分发,且每个孩子至多收到一个礼物。
- 如果无法满足条件,则设 $D_i = -1$。特别地,若圣诞老人无法到达所有精灵的房子,则必然无法满足条件。
输入格式
**本题单个测试点内有多组测试数据。**
第一行输入包含一个整数 $T$($1 \leq T \leq 10$),表示测试数据组数。
随后描述 $T$ 组数据。每组数据包含四行:
- 第一行,一个整数 $N$,城市中的房子数量。
- 第二行, $N$ 个整数 $X_1, X_2, \dots, X_N$。
- 第三行, $N$ 个整数 $H_1, H_2, \dots, H_N$。
- 第四行, $N$ 个整数 $V_1, V_2, \dots, V_N$。
输出格式
每组数据,输出一行 $N$ 个整数:$D_1, D_2, \dots, D_N$。
说明/提示
### 样例解释
#### 样例 $1$ 解释
样例 $1$ 第一组数据中,共有 $8$ 座房子。第 $2$、$3$ 和 $4$ 座房子中有 $3$ 个精灵,分别持有价值为 $2$、$3$ 和 $3$ 的礼物。
第 $5$ 座房子中有一个孩子,期望获得价值为 $5$ 的礼物。由于圣诞老人无法从任何精灵处获取满足此条件的礼物,该孩子将不会收到礼物。
- 在场景 $1$、$2$ 和 $3$ 中,圣诞老人未访问所有精灵的房子,因此 $D_1 = D_2 = D_3 = -1$。
- 在场景 $4$、$5$ 和 $6$ 中,圣诞老人虽访问了精灵,但未找到足够多愿意接受其 $3$ 份礼物的孩子,因此 $D_4 = D_5 = D_6 = -1$。
- 在场景 $7$ 中,圣诞老人需要返回到第 $1$ 座房子($X_{\text{Left}_7} = 10$)以分发全部 $3$ 份礼物,因此 $D_7 = 40$。
- 在场景 $8$ 中,圣诞老人完全无需折返($X_{\text{Left}_8} = X_8 = 40$)即可分发所有 $3$ 份礼物,因此 $D_8 = 35$。
### 数据范围
对于 $100\%$ 的数据,保证:
- $1\le T\le 10$;
- $1\le N\le 96\, 068$;
- $1\le \sum N\le 5\times 10^5$;
- $0\le X_1\le X_2\le \ldots\le X_N\le 10^9$;
- $H_i\in \{0,1\}$;
- $0\le V_i\le N$;
### 子任务
| 编号 | $N\le $ | 分值 |
| :-: | :-: | :-: |
| $1$ | $84$ | $10$ |
| $2$ | $169$ | $10$ |
| $3$ | $1\, 379$ | $10$ |
| $4$ | $2\, 709$ | $10$ |
| $5$ | $5\, 562$ | $10$ |
| $6$ | $13\, 123$ | $10$ |
| $7$ | $27\, 599$ | $10$ |
| $8$ | $41\, 646$ | $10$ |
| $9$ | $95\, 045$ | $10$ |
| $10$ | $96\, 068$ | $10$ |