题目背景
原题链接:https://oier.team/problems/S6B。
题目描述
巡造了一个很牛的飞船,巡为了测试她的飞船,造了一条无限远的从起点出发的射线作为跑道。在跑道上有 n 个加油站,第 i 个在距离起点 pi 的位置,巡可以在这里花费 ti 的时间加编号为 xi 的燃油,同一个加油站的油不能加两次,保证 1≤xi≤4 且 xi 为整数。
巡的飞船牛在两个点:
- 这个飞船油量消耗极低,在本题中可以忽略不计。也就是,我们不考虑油消耗殆尽的情况。
- 如果给飞船加编号为 x 的燃油,飞船的速度会从 v 提升为 v×x。需要注意的是,燃油的效果能叠加。
现在,巡给出了 q 次询问。每次巡会将终点设在跑道上距离起点 yi 的位置,从起点出发,将飞船速度设定为 1 单位每时间,途径的每个加油站可以自由选择是否加油。你需要告诉巡每次至少需要多少时间才能到达终点(即 yi)。
输入格式
第一行,两个正整数 n,q,表示加油站个数和询问个数。
接下来 n 行,每行三个正整数 pi,ti,xi,分别表示第 i 个加油站距离起点的距离、加油需要的时间和燃油的编号。加油站按 pi 严格升序给出,即 pi<pi+1。保证 1≤xi≤4。
接下来一行,q 个正整数 y1,…,yq,表示询问。
输出格式
q 行,每行一个非负实数,表示答案。
本题使用自定义校验器检验你的答案是否正确,你只需要保证你的答案与标准答案相对或绝对误差不超过 10−6 即可。即如果对每个询问,假设你的答案为 x,而标准答案为 y,都有 max(1,∣y∣)∣x−y∣≤10−6,则你的答案被认为是正确的。
提示
【样例解释 #1】
- 对询问 y1=1,不加油,需要时间为 1。
- 对询问 y2=4,不加油,需要时间为 4。
- 对询问 y3=10,在位于起点 3 单位距离的加油站 2 加 2 号燃油,速度提升为 2,需要时间为 3+1+210−3=7.5。
【样例 #2】
见附件中的 ship/ship2.in
与 ship/ship2.ans
。
该组样例满足测试点 1∼3 的约束条件。
【样例 #3】
见附件中的 ship/ship3.in
与 ship/ship3.ans
。
该组样例满足测试点 5∼7 的约束条件。
【样例 #4】
见附件中的 ship/ship4.in
与 ship/ship4.ans
。
该组样例满足测试点 18∼20 的约束条件。
【数据范围】
对于所有测试数据,保证:1≤n≤105,1≤q≤105,1≤p1<p2<⋯<pn≤109,1≤ti≤109,1≤xi≤4,1≤yi≤109。
测试点编号 |
n≤ |
q≤ |
xi∈ |
pi,yi≤ |
1∼3 |
10 |
{1,2,3,4} |
109 |
4 |
105 |
{1} |
5∼7 |
100 |
{1,2,3,4} |
1000 |
8∼9 |
105 |
105 |
{1,2} |
109 |
10∼13 |
{1,2,4} |
14∼17 |
10 |
{1,2,3,4} |
18∼20 |
105 |