#CF3733. 还原任务的持续期

还原任务的持续期

题目描述

最近,光头强完成了 nn 个连续的任务。

对于每个任务,已知它被给到光头强的时间为 sis_isis_i 互不相同。我们还知道任务的完成时间 fif_i。对于每个任务,存在一个未知值 di(di>0)d_i(d_i> 0) - 任务执行的持续时间。

已知任务是按照它们的顺序完成的。光头强按照以下方式执行任务:

一旦第一个任务出现,光头强立即开始执行它。 如果在光头强完成上一个任务之前出现了新任务,则将新任务放在队列的末尾。 当光头强完成当前任务且队列不为空时,他立即从队列头部取出新任务(如果队列为空-他只是等待下一个任务)。

找到每个任务的 did_i(持续时间)。

输入格式

第一行包含一个整数 t(1t104)t(1≤t≤10^4),表示测试用例的数量。

接下来是每个测试用例的描述。

每个测试用例的第一行包含一个整数 n(1n2105)n(1≤n≤2⋅10^5)

每个测试用例的第二行包含 nn 个整数 s1<s2<<sn(0si109)s_1<s_2<⋯<s_n(0≤s_i≤10^9)

每个测试用例的第三行包含 nn 个整数 f1<f2<<fn(si<fi109)f_1<f_2<⋯<f_n(s_i<f_i≤10^9)

保证所有测试用例中 nn 的总和不超过 21052⋅10^5

输出格式

对于每个测试用例,输出 nn 个正整数 d1,d2,,dnd_1,d_2,…,d_n,表示每个任务的持续时间。

测试样例

4
3
0 3 7
2 10 11
2
10 15
11 16
9
12 16 90 195 1456 1569 3001 5237 19275
13 199 200 260 9100 10000 10914 91066 5735533
1
0
1000000000
2 7 1 
1 1 
1 183 1 60 7644 900 914 80152 5644467 
1000000000

样例说明

第一个测试用例:

一开始队列为空:[][]。第一个任务就是在这里开始的。在时间 22,光头强完成了第一个任务,所以第一个任务的持续时间是 22。队列为空,所以光头强正在等待。

在时间 33,第二个任务到达。在时间 77,第三个任务到达,现在队列看起来像这样:[7][7]

在时间 1010,光头强完成了第二个任务,因此第二个任务的持续时间为 77。此时,队列中没有任务,所以光头强正在等待。

在时间 1010,光头强立即开始执行第三个任务,并在时间 1111 完成。因此,第三个任务的持续时间为 11

image

第一个测试用例的例子。