3725 - 岛屿的数量
Description

有 N 座岛连在一起(排成一排)形成了一个大的岛屿。如果海平面上升超过某些岛的高度时,则这个岛会被淹没,原本的大岛屿则会分为多个小岛屿;如果海平面一直上升,则所有岛都会被淹没在水下。
给出 N 座岛的高度。然后有 Q 个查询,每个查询给出一个海平面的高度 H,问当海平面高度达到 H 时,海上共有多少个岛屿。
例如,岛屿的高度为 {2, 1, 3, 2, 3},查询为 {0, 1, 3, 2}:
当海面高度为 0 时,所有的岛形成了 1 个岛屿。
当海面高度为 1 时,高度为 1 的岛会被淹没,总共有 2 个岛屿 {2} {3, 2, 3}。
当海面高度为 3 时,所有岛都会被淹没,总共 0 个岛屿。
当海面高度为 2 时,高度为 2、1、2 的岛会被淹没,总共有 2 个岛屿 {3} {3}。
一座岛在海平面高度为 H 时未被淹没,当且仅当它的高度严格大于 H。相邻且都未被淹没的岛连成同一个岛屿。

Input

第 1 行:2 个数 N, Q,中间用空格分隔,其中 N 为岛的数量,Q 为查询的数量(1 <= N, Q <= 50000)。
第 2 - N+1 行:每行 1 个数,对应 N 座岛屿的高度(1 <= A[i] <= 10^9)。
第 N+2 - N+Q+1 行:每行一个数,对应查询的海平面高度(1 <= Q[i] <= 10^9)。

Output

输出共 Q 行,对应每个查询的岛屿数量。

Examples

Input

5 4
2
1
3
2
3
0
1
3
2

Output

1
2
0
2
Hint

把未被淹没(高度 > H)的岛看作 1,被淹没的看作 0,答案就是这一排里连续 1 段的段数。而"段数 = 1 的个数 − 相邻都是 1 的对数",即 ans(H) = #{i : A[i] > H} − #{i>=2 : min(A[i-1],A[i]) > H}。令多重集 SA=所有 A[i],SB=所有相邻对的 min(A[i-1],A[i]),把 SA、SB 分别排序后,每个查询用 upper_bound 求出严格大于 H 的元素个数,两者相减即为答案。总复杂度 O((N+Q) log N)。

Source
51nod 1276
Tags
题目参数
Time Limit 3 seconds
Memory Limit 128 MB
提交次数 2
通过次数 1