CF2106E.Wolf
普及+/提高
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
狼发现了 n 只羊,它们的可口度分别为 p1,p2,...,pn,其中 p 是一个排列∗。狼想在 p 上使用二分查找来寻找可口度为 k 的羊,但 p 可能并未排序。对于区间 [l,r] 上寻找 k 的二分查找是否成功,用 f(l,r,k) 表示,其定义如下:
如果 l>r,则 f(l,r,k) 失败。否则,令 m=⌊2l+r⌋,然后:
- 如果 pm=k,则 f(l,r,k) 成功;
- 如果 pm<k,则 f(l,r,k)=f(m+1,r,k);
- 如果 pm>k,则 f(l,r,k)=f(l,m−1,k)。
书呆子牛决定帮助狼。书呆子牛会收到 q 个查询,每个查询包含三个整数 l、r 和 k。在开始查找之前,书呆子牛可以选择一个非负整数 d 和 d 个下标 1≤i1<i2<…<id≤n,其中对于所有 1≤j≤d 都有 pij=k。然后,他可以随意重新排列元素 pi1,pi2,...,pid。
对于每个查询,输出书呆子牛需要选择的最小整数 d,使得 f(l,r,k) 能够成功,或者报告这是不可能的。注意,查询是独立的,且实际的重新排列不会被执行。
∗ 长度为 n 的排列是指包含从 1 到 n 的所有整数且每个整数恰好出现一次的数组。
输入格式
输入的第一行包含一个整数 t(1≤t≤104)——测试用例的数量。
每个测试用例的第一行包含两个整数 n 和 q(1≤n,q≤2⋅105)——分别表示 p 的长度和查询的数量。
第二行包含 n 个整数 p1,p2,...,pn——表示第 i 只羊的可口度。保证 p 中每个从 1 到 n 的整数恰好出现一次。
接下来的 q 行每行包含三个整数 l、r 和 k(1≤l≤r≤n,1≤k≤n)——分别表示二分查找的区间范围和要查找的整数。
保证所有测试用例的 n 之和和 q 之和均不超过 2⋅105。
输出格式
对于每个查询,输出一行,表示书呆子牛需要选择的最小整数 d,使得 f(l,r,k) 能够成功。如果不可能,则输出 −1。
输入输出样例
输入#1
8 5 3 1 2 3 4 5 1 5 4 1 3 4 3 4 4 7 4 3 1 5 2 7 6 4 3 4 2 2 3 5 1 5 6 1 7 3 2 1 2 1 1 2 1 1 1 1 1 1 1 7 1 3 4 2 5 7 1 6 1 7 1 16 1 16 10 12 6 13 9 14 3 8 11 15 2 7 1 5 4 1 16 4 16 1 14 1 3 15 4 5 6 16 7 8 9 10 11 12 13 2 1 16 14 13 1 12 13 10 9 8 4 11 5 7 6 2 1 3 1 13 2
输出#1
0 -1 0 2 0 -1 4 -1 0 -1 -1 -1 -1
说明/提示
在第一个样例的第二个查询中:由于 4 不存在于前三个元素中,因此在该范围内查找 4 是不可能的。
在第二个样例的第一个查询中,可以选择下标 2 和 3,并交换它们,使得 p=[3,5,1,2,7,6,4]。然后,f(3,4,2) 的执行过程如下:
- 令 m=⌊23+4⌋=3。因为 p3=1<2,所以 f(3,4,2)=f(4,4,2)。
- 令 m=⌊24+4⌋=4。因为 p4=2=k,所以 f(4,4,2) 成功,因此 f(3,4,2) 也成功。
总共选择了 2 个下标,因此最终的成本是 2,可以证明这是最小的。注意,对于这个查询,不能选择下标 4,因为 p4=k=2。
在第二个样例的最后一个查询中,可以选择下标 2,3,4,5 并重新排列它们,使得 p=[3,5,2,7,1,6,4]。然后,f(1,7,3) 成功。
翻译由 DeepSeek V3 完成
输入解题思路,AI测评打分。不知道怎么写?