『JROI-4』Sunset
题目背景
写不出优美的文字,索性不放背景了。【背景待填充】
> 由于这只是个 C,出题人打算良心点,于是加了几个 $0$(指交互次数)(确信)——验题人注。
题目描述
**这是一道交互题。**
落日可以抽象成一个序列 $\{a_n\}$.
$\{a_n\}$ 是一个 $1\sim n$ 的排列。
你还有一个数列 $\{d_n\}$,为**当前** $a$ 数列的前缀最大值。
换言之,
$$d_i=\max_{j=1}^i \{a_j\}$$
注意:根据前文的定义,$\{d_n\}$ 可能随着 $\{a_n\}$ 数列的改变而改变。
您可以进行两种不同的操作:
- 指定一个 $i$,询问对于当前的 $a$ 数列, $d_{1\sim i}$ 中有几个不同的值。
- 指定一个 $i$,使得 $a_i\leftarrow 0$.
请使用不超过 $5500$ 次操作求出**原排列**。
**保证交互库是静态的,即交互库不会在交互过程中改变 $a$ 数列。**
输入输出格式
输入格式
本题多测,第一行一个整数 $T$,表示测试组数,接下来 $T$ 行每行一个整数 $n$,表示本组数据下数列的长度。
本题使用 IO 交互模式。
### 交互格式
- `? 1 i` 询问 $d_{1\sim i}$ 中有几个不同的值,交互库会返回一个正整数 $x$ 表示答案。
- `? 2 i` 使 $a_i=0$。
- `! a1 a2 a3 ... an` 输出答案。
请注意:在每组数据中,请保证前两种操作的次数总和不超过 $5500$。
需要注意的是,在每一次操作后,需要调用以下函数刷新缓存:
- 对于 C/C++:`fflush(stdout);`
- 对于 C++:`std::cout << std::flush;`
- 对于 Java:`System.out.flush();`
- 对于 Python:`stdout.flush();`
- 对于 Pascal:`flush(output);`
对于其他语言,请自行查阅对应语言的帮助文档。
输出格式
见「交互格式」。
输入输出样例
输入样例 #1
1
3
1
2
3
2
输出样例 #1
? 1 1
? 1 2
? 1 3
? 2 2
? 1 3
! 1 2 3
说明
**样例仅供理解交互过程,可能不符合逻辑。**
【样例解释】
初始的序列 $a$ 为 `1 2 3`,$d$ 为 `1 2 3`.
在对交互库输出了形如 `? 2 2` 的命令后,序列 $a$ 变为 `1 0 3`,$d$ 变为 `1 1 3`,此时 $d_1\sim d_3$ 中有 $2$ 种不同的值,分别是 $1,3$.
------------
可供选手参考的资料:[OI Wiki-交互题](https://oi-wiki.org/contest/interaction/) **|** [猜数(IO交互版)
](https://www.luogu.com.cn/problem/P1733)
------------
## 数据范围
- 对于 $10\%$ 的数据,$T=1$;
- 对于 $30\%$ 的数据,$n\le 70$;
- 对于另外 $20\%$ 的数据,保证数列 $a$ 随机生成;
- 对于全部数据:$T \leq 10,1\leq n\leq 500$。