#CF2021C2. 调整演示(困难版本)
调整演示(困难版本)
C2. 调整演示(困难版本)
时间限制:每个测试 秒
内存限制: MB
这是本题的困难版本。在两个版本中, 的约束和时间限制不同。在此版本中,。只有解决了所有版本的题目,你才能进行 Hack。
题目描述
一个由 名成员组成的团队(编号从 到 )将在一个大型会议上进行幻灯片演示。幻灯片共有 张。
有一个长度为 的数组 。初始时,成员们按照 的顺序从前到后站成一排。幻灯片将按照从第 张到第 张的顺序依次演示。每个部分将由队伍最前面的成员来演示。每张幻灯片演示完毕后,你可以将当前队伍最前面的成员移动到队伍中的任意位置(其余成员的相对顺序保持不变)。例如,假设队伍为 。在成员 演示完当前幻灯片后,你可以将队伍变为 、、 或 。
还有一个长度为 的数组 。如果存在一种移动方式,使得对于所有 (),都能让成员 演示幻灯片 ,则称该演示是好的。
然而,你烦人的老板希望对数组 进行 次更新。在第 次更新中,他会选择一个幻灯片 和一个成员 ,并将 设置为 。注意这些更新是持久性的,即对数组 的修改会应用于后续的更新处理中。
对于数组 的 种状态(初始状态以及每次更新后的状态),分别判断演示是否是好的。
输入格式
每个测试包含多个测试用例。第一行包含一个整数 (),表示测试用例的数量。接下来是每个测试用例的描述。
每个测试用例的第一行包含三个整数 、 和 (,),分别表示成员数量和幻灯片数量。
第二行包含 个整数 (),表示成员从前往后的初始顺序。保证 中 到 的每个整数恰好出现一次。
第三行包含 个整数 (),表示应该演示每个幻灯片的成员。
接下来的 行,每行包含两个整数 和 (,),表示一次更新的参数。
保证所有测试用例的 之和、 之和以及 之和分别不超过 。
输出格式
对于每个测试用例,输出 行,对应数组 的 种状态(初始状态和每次更新后)。如果演示是好的,输出 "YA",否则输出 "TIDAK"。
你可以以任意大小写输出答案(大小写不敏感)。例如,字符串 "yA"、"Ya"、"ya" 和 "YA" 都会被识别为肯定回答。
示例
输入
3
4 2 2
1 2 3 4
1 1
1 2
1 1
3 6 2
1 2 3
1 1 2 3 3 2
3 3
2 2
4 6 2
3 1 4 2
3 1 1 2 3 4
3 4
4 2
输出
YA
TIDAK
YA
YA
TIDAK
YA
TIDAK
YA
YA
样例解释
第一个测试用例:初始时,两张幻灯片都由成员 演示,成员 已经在队伍最前面,因此不需要移动成员。之后,设置 ,现在幻灯片 必须由成员 演示,但这是不可能的,因为成员 会先演示幻灯片 。然后,设置 ,此时 与初始 相同,使得演示可行。