luogu#P8320. 『JROI-4』Sunset

    ID: 12315 远端评测题 1000ms 128MiB 尝试: 0 已通过: 0 难度: 4 上传者: 标签>洛谷原创交互题Special Judge洛谷月赛

『JROI-4』Sunset

题目背景

写不出优美的文字,索性不放背景了。【背景待填充】

由于这只是个 C,出题人打算良心点,于是加了几个 00(指交互次数)(确信)——验题人注。

题目描述

这是一道交互题。

落日可以抽象成一个序列 {an}\{a_n\}.

{an}\{a_n\} 是一个 1n1\sim n 的排列。

你还有一个数列 {dn}\{d_n\},为当前 aa 数列的前缀最大值。

换言之,

di=maxj=1i{aj}d_i=\max_{j=1}^i \{a_j\}

注意:根据前文的定义,{dn}\{d_n\} 可能随着 {an}\{a_n\} 数列的改变而改变。

您可以进行两种不同的操作:

  • 指定一个 ii,询问对于当前的 aa 数列, d1id_{1\sim i} 中有几个不同的值。
  • 指定一个 ii,使得 ai0a_i\leftarrow 0.

请使用不超过 55005500 次操作求出原排列

保证交互库是静态的,即交互库不会在交互过程中改变 aa 数列。

输入格式

本题多测,第一行一个整数 TT,表示测试组数,接下来 TT 行每行一个整数 nn,表示本组数据下数列的长度。

本题使用 IO 交互模式。

交互格式

  • ? 1 i 询问 d1id_{1\sim i} 中有几个不同的值,交互库会返回一个正整数 xx 表示答案。

  • ? 2 i 使 ai=0a_i=0

  • ! a1 a2 a3 ... an 输出答案。

请注意:在每组数据中,请保证前两种操作的次数总和不超过 55005500

需要注意的是,在每一次操作后,需要调用以下函数刷新缓存:

  • 对于 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

提示

样例仅供理解交互过程,可能不符合逻辑。

【样例解释】

初始的序列 aa1 2 3dd1 2 3.

在对交互库输出了形如 ? 2 2 的命令后,序列 aa 变为 1 0 3dd 变为 1 1 3,此时 d1d3d_1\sim d_3 中有 22 种不同的值,分别是 1,31,3.


可供选手参考的资料:OI Wiki-交互题 | 猜数(IO交互版)


数据范围

  • 对于 10%10\% 的数据,T=1T=1
  • 对于 30%30\% 的数据,n70n\le 70
  • 对于另外 20%20\% 的数据,保证数列 aa 随机生成;
  • 对于全部数据:T10,1n500T \leq 10,1\leq n\leq 500