luogu#P11573. [COTS 2015] 关灯泡 / Žarulje

[COTS 2015] 关灯泡 / Žarulje

题目背景

译自 Izborne Pripreme 2015 (Croatian IOI/CEOI Team Selection) D1T2。1s,0.5G\texttt{1s,0.5G}

题目描述

nn 盏灯泡排成一排,从左到右编号 1n1\sim n。第 ii 盏灯泡发光的功率为 aia_i 瓦。

现在想要将所有灯泡全部关闭。考虑如下的贪心算法:

  • 选择起始位置 pp。关闭灯泡 pp
  • 令当前位置为 xx。若还有灯泡未关闭,循环执行以下流程:
    • 若只有 xx 左边有未关闭的灯泡,则关闭 xx 左边离 xx 最近的灯泡 ll,并令 xlx\gets l
    • 若只有 xx 右边有未关闭的灯泡,则关闭 xx 右边离 xx 最近的灯泡 rr,并令 xrx\gets r
    • 否则,xx 左边离 xx 最近的灯泡为 ll,令 xx 右边离 xx 最近的灯泡为 rr
      • 如果两盏灯泡功率相等,则随机选择一盏灯泡 yy。关闭 yy,并令 xyx\gets y
      • 否则,令功率更大的灯泡为 yy。关闭 yy,并令 xyx\gets y

定义 f(p)f(p) 为起始位置为 pp 时,上述贪心算法产生的不同关灯泡序列有多少个。

给定 mm 个位置 x1,x2,,xmx_1,x_2,\cdots,x_m。对于 i=1,2,,mi=1,2,\cdots,m,求出 f(xi)f(x_i)(109+7)(10^9+7) 取模后的结果。

输入格式

第一行,两个正整数 n,mn,m

第二行,nn 个正整数 a1,a2,,ana_1,a_2,\cdots,a_n

第三行,mm 个正整数 x1,x2,,xmx_1,x_2,\cdots,x_m

输出格式

输出 mm 行。每行一个整数,表示答案对 (109+7)(10^9+7) 取模后的结果。

5 2
3 5 1 4 3
3 5
2
1
7 7
7 7 7 7 7 7 7
7 6 5 4 3 2 1
1
6
15
20
15
6
1

提示

样例解释

样例 11 解释:起始位置为 33 时,[3,2,4,1,5][3,2,4,1,5][3,2,4,5,1][3,2,4,5,1] 是可能的两种关灯泡顺序。

数据范围

对于 100%100\% 的数据,保证:

  • 1xin2×1051\le x_i\le n\le 2\times 10^5
  • 1ai,m2×1051\le a_i,m\le 2\times 10^5
子任务编号 nn\le mm\le 得分
1 1 2×103 2\times 10^3 2×1032\times 10^3 22 22
2 2 2×105 2\times 10^5 5 5 38 38
3 3 2×105 2\times 10^5 40 40