QOJ.ac

QOJ

Límite de tiempo: 0.7 s Límite de memoria: 512 MB Puntuación total: 100

#8498. 水星上的服务器

Estadísticas

火星上的计算机控制系统由 $n$ 个服务器组成,编号从 $1$ 到 $n$。服务器通过 $(n-1)$ 条双向通信信道连接,其中第 $i$ 条信道连接第 $i$ 个和第 $(i+1)$ 个服务器。

我们需要从地球向控制系统发送一个软件更新包。该更新包必须安装在每一台服务器上。由于从地球向火星传输更新包的成本非常高,因此更新包只能从地球发送到某一台服务器。随后,必须通过通信信道将更新包传输到所有其他服务器,传输过程中可能需要经过其他服务器。

由于火星上的高太阳辐射,更新包只能在特定的时间段内通过通信信道传输。对于第 $i$ 条通信信道,已知其允许传输更新包的时间段为 $[l_i, r_i]$。更新包通过任何信道传输都是瞬间完成的。

更新包被传输到第 $j$ 个服务器后,会立即安装并存入一个特殊的内存缓冲区,从该缓冲区可以将其传输到其他服务器。更新包在第 $j$ 个服务器的内存缓冲区中停留的时间为 $t_j$ 秒(从接收时刻开始计算)。如果在更新包位于服务器内存缓冲区的期间,出现了通过信道将其传输到尚未安装更新包的相邻服务器的机会,则它会立即通过该信道进行传输。

由于该更新包包含重要的更新,因此要求尽可能早地开始分发。

你需要编写一个程序,对于每个 $i$(从 $1$ 到 $n$),判断是否可以通过将更新包从地球发送到第 $i$ 个服务器来使所有服务器都安装上更新包。如果可以,请确定将更新包安装到该服务器的最小非负时刻,使得最终所有服务器都能安装上更新。

输入格式

第一行包含一个整数 $n$ —— 服务器的数量 ($1 \le n \le 200\,000$)。

第二行包含 $n$ 个整数 $t_1, t_2, \dots, t_n$,其中 $t_j$ 是更新包在第 $j$ 个服务器内存缓冲区中的停留时间 ($0 \le t_j \le 10^9$)。

接下来的 $(n-1)$ 行描述通信信道。描述第 $i$ 条信道时,给出两个整数 $l_i$ 和 $r_i$ —— 允许通过该信道传输更新包的时间段边界 ($0 \le l_i \le r_i \le 10^9$)。

输出格式

输出包含 $n$ 个整数 $a_1, a_2, \dots, a_n$。

数字 $a_i$ 应等于将更新包安装到第 $i$ 个服务器的最小非负时刻,使得最终所有服务器都能安装上更新。如果对于第 $i$ 个服务器不存在这样的时刻,则输出 $a_i = -1$。

样例

样例输入 1

1
10

样例输出 1

0

样例输入 2

2
3 5
6 8

样例输出 2

3
1

样例输入 3

3
1 2 4
7 10
3 5

样例输出 3

-1
5
5

样例输入 4

4
1 0 3 2
4 6
5 5
7 10

样例输出 4

5
5
4
-1

说明

在第一个样例中,只有一个服务器,安装更新的最小合适时间为 $0$。

在第二个样例中,有两个服务器,它们之间可以在 $6$ 到 $8$ 的时间段内传输更新。第一个服务器在缓冲区中保存更新 $3$ 个单位时间,第二个服务器保存 $5$ 个单位时间。如果我们在时刻 $3$ 将更新发送给第一个服务器,它将在时刻 $6$ 将其传给第二个服务器。同样,如果在时刻 $1$ 将更新发送给第二个服务器,它将在时刻 $6$ 将其传给第一个服务器。

在第三个样例中,无法将更新发送给第一个服务器并使其传给第三个服务器,因为信道 $2-3$ 在信道 $1-2$ 开启之前就已经关闭了。可以在时刻 $5$ 将更新发送给第二个或第三个服务器。此时信道 $2-3$ 是开启的,因此第二个和第三个服务器会立即收到更新。在时刻 $7$(信道 $1-2$ 开启时),更新仍保存在第二个服务器的缓冲区中,并会传给第一个服务器。

在第四个样例中,第二个服务器将包保存 $0$ 个单位时间,而信道 $2-3$ 在 $5-5$ 的时间段内开启。为了通过第二个服务器将更新传给第三个服务器,它必须在时刻 $5$ 到达第二个服务器。如果我们想把更新发送给第三个服务器,可以在时刻 $4$ 进行,此时它会一直保存到时刻 $7$,并最终安装在所有服务器上。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.