G. 模排序
时间限制:5 秒
内存限制:256 兆字节
给定一个整数 m(2≤m≤5⋅105)和一个由小于 m 的非负整数组成的数组 a。
回答以下形式的查询:
1 i x:将 ai 赋值为 x。
2 k:在一次操作中,你可以选择一个元素 ai 并将其赋值为 (ai+k)modm∗ —— 判断是否存在一系列(可能为零次)操作,使得 a 变为非递减†。
注意,查询 2 的实例是相互独立的,即不实际进行操作。查询 1 的实例是持久的。
∗ a(modm) 定义为唯一的整数 b 满足 0≤b<m 且 a−b 是 m 的整数倍。
† 一个大小为 n 的数组 a 称为非递减,当且仅当对于所有 1≤i<n 有 ai≤ai+1。
输入
第一行包含一个整数 t(1≤t≤104)—— 测试用例数。
每个测试用例的第一行包含三个整数 n,m,q(2≤n≤105,2≤m≤5⋅105,1≤q≤105)—— 数组 a 的大小、整数 m 以及查询数量。
第二行包含 n 个整数 a1,a2,…,an(0≤ai<m)。
接下来 q 行,每行是以下两种形式之一:
1 i x(1≤i≤n,0≤x<m)
2 k(1≤k<m)
保证所有测试用例的 n 之和以及 q 之和均不超过 105。
输出
对于每个查询 2 的实例,输出一行,若存在一系列操作使得 a 变为非递减,则输出 "YES",否则输出 "NO"。
输出大小写不敏感(例如 "yEs"、"yes"、"Yes"、"YES" 均视为肯定回答)。
样例
输入
2
7 6 6
4 5 2 2 4 1 0
2 4
1 4 5
2 4
2 3
1 7 2
2 3
8 8 3
0 1 2 3 4 5 6 7
2 4
1 3 4
2 4
输出
YES
NO
NO
YES
YES
NO
说明
第一个样例中,初始数组为:
4522410
通过对 a1 操作两次,a2 操作两次,a5 操作一次,a6 操作两次,a7 操作一次,得到数组:
0122234
该数组是非递减的。
第二次查询后,数组变为:
4525410
可以证明,无法通过 ai:=(ai+4)mod6 的操作使其变为非递减,也无法通过 ai:=(ai+3)mod6 的操作实现。