#P12053. 数组

数组

数组(array)

题目描述

有一个数组 aa 和一个集合 SS,初始每一个数 aia_i 都有一个值 0011SS 为空。一开始每个数是多少都是未知的。每次可能进行以下三种操作:

  1. MERGE k T\text{MERGE}\ k\ T:给定集合 TT,保证 TT 的大小为 kk 且与 SS 的交集为空。令 x=iTaix=\displaystyle\bigvee_{i\in T}a_i,对于集合 TT 里所有 ii,将 aia_i 修改为 xx
  2. GET x y\text{GET}\ x\ y:保证 x∉Sx\not\in S,已知当前 ax=ya_x=y,且若 yy 等于 11 则将 xx 加入集合 SS
  3. QUERY p\text{QUERY}\ p:询问在满足当前已知的所有信息的情况下,命题 i∉S,ai=0\forall i\not\in S,a_i=0 是否一定为真。若为假,则询问序列 p,p+1,p+2,n,1,2,p1p,p+1,p+2,\dots n,1,2,\dots p-1 中第一个可能使得 i∉S\andai0i\not\in S\and a_i\not= 0 的数 ii

输入格式

本题强制在线。

第一行三个正整数 n,m,tn,m,t,分别表示数组大小,操作次数和强制在线常数。

接下来是 mm 行,每行先输入一个字符串 ss

  • ssMERGE,表示是操作 11,接下来输入一个数 kk 表示集合 TT 的大小,后面紧跟 kk 个数 xix_i,表示集合 TT 内的元素。
  • ssGET,表示是操作 22,接下来输入两个数 x,yx,y
  • ssQUERY,表示是操作 33,接下来输入一个数 xx

需要注意的是,输入中每一个 xx,令上一次的询问结果为 lastanslastans(若没有询问或上次询问命题一定为真则为 00,否则为输出中唯一的数),真实值为 ((x1+t×lastans)modn)+1((x-1+t\times lastans)\bmod n)+1

输出格式

对于每次 33 操作,第一行一个字符串为 YESNO,表示命题是否为真。若输出为 NO 则需要再输出一个数 iiii 的定义如题目描述。

输入输出样例 1

array1.in array1.out
5 8 0
QUERY 1
MERGE 2 1 3
GET 1 0
MERGE 3 4 2 3
GET 5 1
QUERY 5
GET 4 0
QUERY 2
NO 1
NO 2
YES

说明/提示

样例解释:

第一次询问,每个数的值都不知道,所以第一个可能不确定的数是 11

第二次询问,当前可能的情况有以下两种:

0 0 0 0 10 1 1 1 1

而集合 SS 内只有元素 55,所以命题为假,从 55 开始的序列第一个可能不为 00 的位置是 22

第三次询问,当前序列只能是 0 0 0 0 1,此时集合 SS 内有元素 55,命题为真。

数据范围:

子任务编号 分值 特殊性质
subtask 1\texttt{subtask 1} 1010 n10n\le 10m100m\le 100
subtask 2\texttt{subtask 2} 2020 n,m2000n,m\le 2000
subtask 3\texttt{subtask 3} n,m100000n,m\le 100000t=0t=0
subtask 4\texttt{subtask 4} t=0t=0
subtask 5\texttt{subtask 5} 3030

对于全部的数据,1k,xn5000001\le k,x \le n\le 5000001m10000001\le m\le 10000001k10000001\le \sum k\le 10000000t,y10\le t,y\le 1。保证任意时刻输入总能存在一种最初的数组 aa 使得每个 22 操作符合真实情况。