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