P17314 [KismetOI 2026 I] oo_vv_oo

题目描述

有一个长度为 $n$ 的序列 $A$。 你每次可以给交互库一个下标序列 $i_1,i_2,i_3,\dots,i_k$。需保证 $1 \le i_x \le n$,但可以有相同的。 交互库会返回 $j_1,j_2,\dots,j_K$。其中 $j_x$ 表示 $A_{i_{j_x}} > \max(A_{i_{j_{x}-1}},A_{i_{j_{x}+1}})$,显然 $1 < j_x < k$。 现在已知 $n$,并且 $A$ 中存在唯一的最大值。同时一定有 $A_1=A_n=0$。请在 $m$ 次询问内回答最大值的下标。 **请注意**:查询的 $k$ 不能超过 $n$,否则可能出现未知错误情况。

输入格式

首先输入一行两个整数 $n,m$。 对于你的每次查询,交互库会按如下格式输出一行:首先输出一个整数 $K$,接下来输出 $K$ 个整数表示返回的 $j$ 序列,用空格隔开。

输出格式

你可以以如下格式进行交互: * 输出一行 `? k i[1] i[2] ... i[k]` 进行题目描述中给出的查询。 * 输出一行 `! ans` 表示你确定了最大值的下标 $ans$ 并输出,请在此后自行结束程序运行以防止获得不可预知的结果。 **请在每次执行完一次查询或给出答案的输出后,输出一个换行并清空缓冲区**。 你可以使用如下语句来清空缓冲区: - 对于 C/C++:`fflush(stdout)`; - 对于 C++:`std::cout

说明/提示

### 【样例解释】 请注意,样例仅供展示交互格式,不保证样例输出策略的合理性。 隐藏的 $A$ 序列为 $0,1,3,1,2,0$。 对于第一次查询,有 $A_2A_4$,$A_4A_6$,故交互库返回 $3,5$。 对于第二次查询,有 $A_2A_4$,故交互库返回 $2$。**请注意返回的是 $j$ 序列而非 $i_j$ 序列**。 程序找到答案并输出 $3$,$A_3=3$ 确实为序列最大值,答案正确。 ### 【数据范围】 对于所有数据,满足 $3 \le n \le 10^6, 1 \le m \le 10^6, 0 \le A_i \le 10^9$。 ::cute-table{tuack} | 子任务编号 | $n$ | 特殊性质 | 分值 | | :--------: | :--------: | :------: | :--: | | #1 | $=3$ | 无 | $5$ | | #2 | $\le 50$ | $m=10^4$ | $25$ | | #3 | $\le 100$ | $m=2n$ | $25$ | | #4 | $\le 10^6$ | $m=20$ | $45$ |