CFCF2163D2.Diadrash (Hard Version)
提高+/省选-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
这是本题的 Hard 版本。不同之处在于本题最多可以进行 30 次询问。只有在你已解决所有版本的本题时才能进行 Hack。
本题为交互题。
有一个你未知的排列 p,它由 0 到 n−1 的整数构成。此外,给定 q 个区间 [l1,r1],[l2,r2],…,[lq,rq],其中 1≤li≤ri≤n。
你需要找出在输入提供的 q 个区间中,能得到的最大的 MEX 值。形式化地说,你需要确定 maxi=1qMEX([pli,pli+1,…,pri]) 的值。为此,你最多可以进行 30 次以下形式的询问:
- 任选整数 1≤l≤r≤n,你将会收到 MEX([pl,pl+1,…,pr]) 的值。
∗ 排列是指 0 到 n−1 的整数的一个序列,每个整数恰好出现一次。例如 [0,3,1,2] 是排列,但 [0,0,2,1] 不是。
† 序列的 MEX 是指序列中没有出现的最小非负整数。例如 MEX([0,0,1,3])=2,MEX([1,2,2])=0。
输入格式
每组测试数据包含多组用例。第一行包含测试用例个数 t(1≤t≤100)。接下来是每组测试用例如下:
每组用例第一行包含两个正整数 n 和 q(4≤n≤104,1≤q≤3⋅105),分别表示排列的长度和区间数量。
接下来的 q 行每行包含两个整数 li,ri(1≤li≤ri≤n)。
保证所有测试用例中 n 和 q 的总和分别不超过 104 和 3⋅105。
额外约定:同一测试用例中没有重复的区间。
输入输出样例
输入#1
3 4 3 1 2 2 4 1 3 2 0 1 4 6 6 1 2 2 4 3 3 4 6 5 5 6 6 6 1 2 4 4 1 1 2 2 3 3 4 4
输出#1
? 1 3 ? 4 4 ? 1 1 ? 1 4 ! 2 ? 1 6 ? 3 3 ? 2 4 ! 2 ! 1
说明/提示
在第一个示例中,隐藏排列为 p=[0,3,1,2],区间为 [1,2],[2,4],[1,3]。第 3 个区间最优,因为 MEX([p1,p2,p3])=MEX([0,3,1])=2,为最大值。
第一次询问我们查询 l=1,r=3,裁判返回 MEX([p1,p2,p3])=2。第二次询问 l=4,r=4,裁判返回 MEX([p4])=0。同理,MEX([p1])=1,MEX([p1,p2,p3,p4])=4。
最后我们确定答案为 2。
第二个示例,p=[3,5,0,1,4,2]。
第三个示例,p=[0,1,2,3]。
注意,这只是对交互方式的说明,并未展示任何解题策略。