P14134 【MX-X22-T5】「TPOI-4E」Get MiN? Get MeX!
题目描述
**这是一道交互题。**
有一个隐藏的 $0\sim n-1$ 的排列 $a_1, \ldots, a_n$,**这个排列是在你开始询问前就预先确定的,并且这个排列不会随着你的询问而改变**,你可以对这个排列进行若干次询问:
- 给定一个集合 $S$,交互库给出 $\min_{x\in S}a_x+\operatorname*{mex}_{x\in S}a_x$ 的值,此类询问至多使用 $35$ 次。
- 给定一个集合 $S$,交互库给出 $\min_{x\in S}a_x-\operatorname*{mex}_{x\in S}a_x$ 的值,此类询问至多使用 $1$ 次。
$\operatorname*{mex}_{x\in S}a_x$ 的含义为集合 $\{ a_x \mid x \in S \}$ 中最小未出现过的非负整数。
询问之后,你需要计算出排列中 $0$ 的位置。
输入格式
见【输出格式】。
输出格式
你需要从**标准输入**读入一个正整数 $n$,表示排列的长度。
对于第一种询问,你需要向**标准输出**输出一个字符 `?`、一个整数 $1$,一个整数 $len$ 以及 $len$ 个互不相同的整数 $S_i$($1\le S_i\le n$),注意此类询问至多使用 $35$ 次。
对于第二种询问,你需要向**标准输出**输出一个字符 `?`、一个整数 $2$,一个整数 $len$ 以及 $len$ 个互不相同的整数 $S_i$($1\le S_i\le n$),注意此类询问至多使用 $1$ 次。
然后你需要清空缓冲区。你可以使用如下语句来清空缓冲区:
- C++:`fflush(stdout)`;
- Java:`System.out.flush()`;
- Python:`stdout.flush()`;
- Pascal:`flush(output)`;
- 其他语言请参考相关文档。
接下来,你需要从**标准输入**中输入一个整数,代表评测机返回的结果。
询问结束后,你需要先向**标准输出**输出字符 `!`,然后输出一个整数 $p$,表示排列中 $0$ 的位置。输出后,你的程序应立即终止。
如果在某个时刻你的程序读取到 $-10^9$ 作为答案,它应立即退出(例如,通过调用 `exit(0)`)。这种情况下,你将得到“Wrong Answer”,这意味着你提出的问题超过限制或提出了无效问题。如果你忽略这一点,可能会因为程序继续从已关闭的流中读取而得到其他判定结果。
说明/提示
**【样例解释】**
**样例仅供展示交互格式,不保证样例输出策略的合理性。**
隐藏的排列为 $a = [5,2,0,1,3,4]$。
**【数据范围】**
**本题采用捆绑测试。**
| 子任务编号 | $n \le$ | 特殊性质 | 分值 | 子任务依赖 |
|:-:|:-:|:-:|:-:|:-:|
| $1$ | $1$ | 无 | $1$ | 无 |
| $2$ | $2$ | ^ | $2$ | 无 |
| $3$ | $36$ | ^ | $7$ | $1,2$ |
| $4$ | $10^5$ | A | $15$ | 无 |
| $5$ | ^ | B | $20$ | 无 |
| $6$ | $100$ | 无 | $15$ | $1,2,3$ |
| $7$ | $2\times 10^3$ | ^ | $15$ | $1,2,3,6$ |
| $8$ | $10^5$ | ^ | $25$ | $1,2,3,4,5,6,7$ |
- 特殊性质 A:保证排列中前 $\lceil \frac{n}{2}\rceil$ 个数为偶数,后 $\lfloor \frac{n}{2}\rfloor$ 个数为奇数。
- 特殊性质 B:保证排列纯随机生成。
对于所有数据,保证 $1 \le n \le 10^5$。