#P17314. [KismetOI 2026 I] oo_vv_oo

[KismetOI 2026 I] oo_vv_oo

题目描述

有一个长度为 nn 的序列 AA。

你每次可以给交互库一个下标序列 i1,i2,i3,…,iki_1,i_2,i_3,\dots,i_k。需保证 1≤ix≤n1 \le i_x \le n,但可以有相同的。

交互库会返回 j1,j2,…,jKj_1,j_2,\dots,j_K。其中 jxj_x 表示 $A_{i_{j_x}} > \max(A_{i_{j_{x}-1}},A_{i_{j_{x}+1}})$,显然 1<jx<k1 < j_x < k。

现在已知 nn,并且 AA 中存在唯一的最大值。同时一定有 A1=An=0A_1=A_n=0。请在 mm 次询问内回答最大值的下标。

请注意:查询的 kk 不能超过 nn,否则可能出现未知错误情况。

输入格式

首先输入一行两个整数 n,mn,m。

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

输出格式

你可以以如下格式进行交互:

  • 输出一行 ? k i[1] i[2] ... i[k] 进行题目描述中给出的查询。
  • 输出一行 ! ans 表示你确定了最大值的下标 ansans 并输出,请在此后自行结束程序运行以防止获得不可预知的结果。

请在每次执行完一次查询或给出答案的输出后,输出一个换行并清空缓冲区。

你可以使用如下语句来清空缓冲区:

  • 对于 C/C++:fflush(stdout);
  • 对于 C++:std::cout << std::flush;
  • 对于 Java:System.out.flush();
  • 对于 Python:stdout.flush();
  • 对于 Pascal:flush(output);
  • 对于其他语言,请自行查阅对应语言的帮助文档。

请保证你的程序的交互过程符合格式要求,否则你可能得到不可预知的错误结果。

如果您有更多疑问,可以参阅样例与样例解释。

6 1000000

2 3 5

1 2

? 6 1 2 3 4 5 6

? 4 2 3 4 5

! 3

提示

【样例解释】

请注意,样例仅供展示交互格式,不保证样例输出策略的合理性。

隐藏的 AA 序列为 0,1,3,1,2,00,1,3,1,2,0。

对于第一次查询,有 A2<A3>A4A_2<A_3>A_4,A4<A5>A6A_4<A_5>A_6,故交互库返回 3,53,5。

对于第二次查询,有 A2<A3>A4A_2<A_3>A_4,故交互库返回 22。请注意返回的是 jj 序列而非 iji_j 序列。

程序找到答案并输出 33,A3=3A_3=3 确实为序列最大值,答案正确。

【数据范围】

对于所有数据,满足 $3 \le n \le 10^6, 1 \le m \le 10^6, 0 \le A_i \le 10^9$。

::cute-table{tuack} | 子任务编号 | nn | 特殊性质 | 分值 | | :--------: | :--------: | :------: | :--: | | #1 | =3=3 | 无 | 55 | | #2 | ≤50\le 50 | m=104m=10^4 | 2525 | | #3 | ≤100\le 100 | m=2nm=2n | 2525 | | #4 | ≤106\le 10^6 | m=20m=20 | 4545 |