CF1986C.Update Queries

传统题 时间 2000 ms 内存 256 MiB 5 尝试 1 已通过 1 标签

Update Queries

题目描述

让我们考虑如下的简单问题。给定一个长度为 nn 的字符串 ss,由小写拉丁字母组成,以及一个长度为 mm 的下标数组 indind1indin1 \leq ind_i \leq n),和一个长度为 mm 的字符串 cc,由小写拉丁字母组成。然后,依次进行 mm 次更新操作,即在第 ii 次操作时,将 sindis_{ind_i} 赋值为 cic_i。注意,你需要按照顺序依次执行所有 mm 次操作。

当然,如果你改变数组 indind 中下标的顺序和/或字符串 cc 中字母的顺序,可能会得到不同的结果。请你找出在可以任意重排数组 indind 和字符串 cc 的情况下,经过 mm 次更新操作后能够得到的字典序最小的字符串 ss

如果满足以下任一条件,则字符串 aa 的字典序小于字符串 bb

  • aabb 的前缀,且 aba \neq b
  • aabb 第一个不同的位置,aa 中的字母在字母表中比 bb 中对应的字母更靠前。

输入格式

每组测试数据包含多组输入。第一行包含一个整数 tt1t1041 \leq t \leq 10^4),表示测试数据组数。接下来是每组测试数据的描述。

每组测试数据的第一行包含两个整数 nnmm1n,m1051 \leq n, m \leq 10^5),分别表示字符串 ss 的长度和更新操作的次数。

第二行包含一个长度为 nn 的字符串 ss,由小写拉丁字母组成。

第三行包含 mm 个整数 ind1,ind2,,indmind_1, ind_2, \ldots, ind_m1indin1 \leq ind_i \leq n),表示下标数组 indind

第四行包含一个长度为 mm 的字符串 cc,由小写拉丁字母组成。

保证所有测试数据中 nn 的总和不超过 2×1052 \times 10^5,所有 mm 的总和也不超过 2×1052 \times 10^5

输出格式

对于每组测试数据,输出经过任意重排 indindcc 后,能够得到的字典序最小的字符串 ss

说明/提示

在第一组测试数据中,你可以保持数组 indind 和字符串 cc 不变,直接按顺序执行所有操作。

在第二组测试数据中,你可以将数组 ind=[1,1,4,2]ind = [1, 1, 4, 2]c=c = "zczw"。则字符串 ss 的变化过程为:$meow \rightarrow zeow \rightarrow ceow \rightarrow ceoz \rightarrow cwoz$。

在第三组测试数据中,你可以保持数组 indind 不变,将 c=c = "admn"。则字符串 ss 的变化过程为:$abacaba \rightarrow abacaba \rightarrow abdcaba \rightarrow abdcmba \rightarrow abdcmbn$。

由 ChatGPT 4.1 翻译

样例

4
1 2
a
1 1
cb
4 4
meow
1 2 1 4
zcwz
7 4
abacaba
1 3 5 7
damn
7 10
traktor
7 6 5 4 3 2 1 6 4 2
codeforces
b
cwoz
abdcmbn
ccdeefo

在线编程 IDE

建议全屏模式获得最佳体验