#P10159. [DTCPC 2024] The last permutation

    ID: 9572 远端评测题 1000ms 512MiB 尝试: 0 已通过: 0 难度: 6 上传者: 标签>2024交互题Special Judge剪枝构造洛谷月赛

[DTCPC 2024] The last permutation

题目背景

本题题目背景不均为虚构,不影射任何人

小 L 是小 L 初中时的白月光。

有一天,小 L 在朋友圈说要玩农,小 L 火速研究怎么下载王者。

第二天,小 L 在朋友圈说要玩吃鸡,小 L 火速研究怎么下载 pubg。

但小 L 很快就和小 L 分手了,小 L 最后的情思化作一个排列。遗憾的是,小 L 并不情愿告诉大家。

不过在你的不断追问下,小 L 还是同意回答几个关于排列的问题。

题目描述

现存在一个长度为 nn 的隐藏排列 pp。你可以进行如下询问若干次:选择三元组 (l,r,k)(l,r,k),满足 1lrn1\leq l\leq r\leq n1krl+11\leq k\leq r - l + 1,交互库会返回下标在 [l,r][l,r] 内的第 kk 大值。

对于一次询问操作,其代价为 1rl+1\frac{1}{r-l+1},你需要在不超过 11.811.8 的代价内得出排列。

交互库不自适应,也就是说,你所需得到的排列在交互开始前就已经确定。

输入格式

输入第一行是一个正整数 tt (1t51 \le t \le 5) 表示测试组数。

对于每组数据,输入一行 nn (1n10001 \le n \le 1000) 表示排列 pp 的长度。

当你已经得到排列,你应当输出形如 ! p1 p2 ... pn 表示你得出的排列。

本题使用 IO 交互模式。

交互格式

  • ? l r k,询问下标在 [l,r][l,r] 内的第 kk 大值。

  • ! p1 p2 p3 ... pn,输出答案。

请注意:在每组数据中,请保证询问操作的代价总和不超过 11.811.8

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

  • 对于 C/C++:fflush(stdout);
  • 对于 C++:std::cout << std::flush;
  • 对于 Java:System.out.flush();
  • 对于 Python:stdout.flush();
  • 对于 Pascal:flush(output);

对于其他语言,请自行查阅对应语言的帮助文档。

输出格式

见「交互格式」。

1
5

2

3

1

4




? 1 1 1

? 2 2 1

? 3 3 1

? 4 4 1

! 2 3 1 4 5