P17006 [NWERC 2019] 高度剖面 / Height Profile
题目背景
译自 [Northwestern Europe Regional Contest (NWERC) 2019](http://2019.nwerc.eu)。
题目描述
自行车经典赛 Amstel Gold Race 每年在附近的荷兰林堡省举行。比赛中有许多短而频繁的爬坡,选手几乎没有时间在两段爬坡之间恢复。例如,该比赛最后 $42$ 千米中有 $8$ 段陡坡,平均每段大约 $1$ 千米。
每段爬坡的**坡度**以百分比给出。坡度为 $100\%$ 表示每水平前进 $1$ 米,竖直方向也上升 $1$ 米。坡度为 $0\%$ 表示完全平坦。一般地,坡度为 $p\%$ 表示每水平前进 $1$ 米,竖直方向变化 $p/100$ 米。注意坡度也可以为负。
你知道从比赛起点开始,在每个整数水平千米处道路的高度。为简化起见,我们认为这些点之间的高度是分段线性的。换句话说,在 $0$ 到 $1$ 千米之间、$1$ 到 $2$ 千米之间,依此类推,坡度都视为常数。例如在下图中,水平距离 $2.5$ 千米处的高度正好为 $20$ 米。
:::align{center}

:::
Amstel Gold Race 不能直接与环法或环意中的某些山地赛段相比,但你仍然想进行比较。对于每个一日赛,无论是 Amstel Gold Race 还是环法中的某个赛段,你都想知道:在至少达到某个给定坡度的水平区间中,最长区间的长度是多少。实际上,你想对多个坡度都求出答案。
一个水平区间的坡度由其两个端点决定。例如,在上图中,比赛第 $1$ 千米到第 $4$ 千米之间的坡度为 $2\%$,因为在 $2$ 千米的水平距离内上升了 $60$ 米。这个水平区间也是坡度至少为 $2\%$ 的最长区间。
输入格式
输入包含:
- 第一行包含两个整数 $n$ 和 $k$ ($2\le n\le 10^5$, $1\le k\le 50$),表示比赛的水平长度(千米)以及你选择的坡度数量。
- 第二行包含 $n+1$ 个整数 $h_0,h_1,\ldots,h_n$ ($0\le h_i\le 10^9$),其中 $h_i$ 表示从起点水平距离 $i$ 千米处的路线高度,单位为米。
- 接下来 $k$ 行,每行包含一个实数 $g$ ($-100\le g\le 100$,且恰好有一位小数),表示你关心的一个坡度。
输出格式
对于每个给定坡度,按照输入顺序输出一行,表示坡度至少为该值的最长水平区间长度,单位为千米。如果不存在合适区间,输出 `impossible`。
你的答案的绝对误差或相对误差不超过 $10^{-6}$ 即可。
说明/提示
【数据规模与约定】
- $2\le n\le 10^5$。
- $1\le k\le 50$。
- $0\le h_i\le 10^9$。
- 查询坡度 $g$ 满足 $-100\le g\le 100$,且恰好有一位小数。
- 输出长度时,允许绝对误差或相对误差不超过 $10^{-6}$。