#P16356. [2026年山东第二轮集训]小根堆
[2026年山东第二轮集训]小根堆
题目描述
给定一个由 个 + 和 个 - 组成、长度为 的字符串 ,以及一个由 个整数组成的集合
准备两个集合 、,并按照 的顺序依次执行以下操作:
- 当 的第 个字符为
+时,从 到 的整数中选择一个既不在 中、也不在 中的整数,将其加入集合 。 - 当 的第 个字符为
-时,从 中取出最小的整数 ,将其从 中删除并加入集合 。根据约束,执行该操作前 一定非空。
对于向 中加入整数的顺序,共有 种可能。求其中有多少种顺序能够使所有操作完成后满足
答案对 取模。
输入格式
第一行包含两个整数 。
第二行包含一个长度为 的字符串 。
第三行包含 个整数 。
输出格式
输出一个整数,表示满足条件的方案数对 取模后的结果。
样例 1
输入
4 2
++-++-
1 3
输出
4
样例 2
输入
6 4
++-++---++
2 3 4 6
输出
48
样例 3
输入
20 10
++++-++++++--+--+-+++++--+-++-
1 2 3 4 5 6 7 9 12 13
输出
179396825
样例 1 解释
满足条件的一组操作方案如下:
- 当 时,将 加入 ,此时 。
- 当 时,将 加入 ,此时 。
- 当 时,从 中取出最小的 ,并将其从 移入 。此时 。
- 当 时,将 加入 ,此时 。
- 当 时,将 加入 ,此时 。
- 当 时,从 中取出最小的 ,并将其从 移入 。此时 。
样例 2 解释
字符串 的末尾不一定是 -。
数据范围
对于全部数据:
- ;
- 是一个由 个
+和 个-组成、长度为 的字符串; - 对于任意 ,在 的前 个字符中,
-的数量不超过+的数量; - 。
子任务
| 子任务编号 | 分值 | 特殊性质 | ||
|---|---|---|---|---|
| 1 | 10 | 10 | 无 | |
| 2 | 15 | |||
| 3 | 15 | 500 | 7 | |
| 4 | 15 | |||
| 5 | 50 | |||
| 6 | 200 | |||
| 7 | 20 | 500 | ||