CF2106E.Wolf

普及+/提高

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

狼发现了 nn 只羊,它们的可口度分别为 p1,p2,...,pnp_1, p_2, ..., p_n,其中 pp 是一个排列∗^{\text{∗}}。狼想在 pp 上使用二分查找来寻找可口度为 kk 的羊,但 pp 可能并未排序。对于区间 [l,r][l, r] 上寻找 kk 的二分查找是否成功,用 f(l,r,k)f(l, r, k) 表示,其定义如下:

如果 l>rl > r,则 f(l,r,k)f(l, r, k) 失败。否则,令 m=⌊l+r2⌋m = \lfloor\frac{l + r}{2}\rfloor,然后:

  • 如果 pm=kp_m = k,则 f(l,r,k)f(l, r, k) 成功;
  • 如果 pm<kp_m < k,则 f(l,r,k)=f(m+1,r,k)f(l, r, k) = f(m+1, r, k);
  • 如果 pm>kp_m > k,则 f(l,r,k)=f(l,m−1,k)f(l, r, k) = f(l, m-1, k)。

书呆子牛决定帮助狼。书呆子牛会收到 qq 个查询,每个查询包含三个整数 ll、rr 和 kk。在开始查找之前,书呆子牛可以选择一个非负整数 dd 和 dd 个下标 1≤i1<i2<…<id≤n1 \le i_1 < i_2 < \ldots < i_d \le n,其中对于所有 1≤j≤d1 \leq j \leq d 都有 pij≠kp_{i_j} \neq k。然后,他可以随意重新排列元素 pi1,pi2,...,pidp_{i_1}, p_{i_2}, ..., p_{i_d}。

对于每个查询,输出书呆子牛需要选择的最小整数 dd,使得 f(l,r,k)f(l, r, k) 能够成功,或者报告这是不可能的。注意,查询是独立的,且实际的重新排列不会被执行。

∗^{\text{∗}} 长度为 nn 的排列是指包含从 11 到 nn 的所有整数且每个整数恰好出现一次的数组。

输入格式

输入的第一行包含一个整数 tt(1≤t≤1041 \le t \le 10^4)——测试用例的数量。

每个测试用例的第一行包含两个整数 nn 和 qq(1≤n,q≤2⋅1051 \le n, q \le 2 \cdot 10^5)——分别表示 pp 的长度和查询的数量。

第二行包含 nn 个整数 p1,p2,...,pnp_1, p_2, ..., p_n——表示第 ii 只羊的可口度。保证 pp 中每个从 11 到 nn 的整数恰好出现一次。

接下来的 qq 行每行包含三个整数 ll、rr 和 kk(1≤l≤r≤n1 \le l \le r \le n,1≤k≤n1 \le k \le n)——分别表示二分查找的区间范围和要查找的整数。

保证所有测试用例的 nn 之和和 qq 之和均不超过 2⋅1052 \cdot 10^5。

输出格式

对于每个查询,输出一行,表示书呆子牛需要选择的最小整数 dd,使得 f(l,r,k)f(l, r, k) 能够成功。如果不可能,则输出 −1-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

说明/提示

在第一个样例的第二个查询中:由于 44 不存在于前三个元素中,因此在该范围内查找 44 是不可能的。

在第二个样例的第一个查询中,可以选择下标 22 和 33,并交换它们,使得 p=[3,5,1,2,7,6,4]p = [3, 5, 1, 2, 7, 6, 4]。然后,f(3,4,2)f(3, 4, 2) 的执行过程如下:

  1. 令 m=⌊3+42⌋=3m = \lfloor \frac{3 + 4}{2} \rfloor = 3。因为 p3=1<2p_3 = 1 < 2,所以 f(3,4,2)=f(4,4,2)f(3, 4, 2) = f(4, 4, 2)。
  2. 令 m=⌊4+42⌋=4m = \lfloor \frac{4 + 4}{2} \rfloor = 4。因为 p4=2=kp_4 = 2 = k,所以 f(4,4,2)f(4, 4, 2) 成功,因此 f(3,4,2)f(3, 4, 2) 也成功。

总共选择了 22 个下标,因此最终的成本是 22,可以证明这是最小的。注意,对于这个查询,不能选择下标 44,因为 p4=k=2p_4 = k = 2。

在第二个样例的最后一个查询中,可以选择下标 2,3,4,52, 3, 4, 5 并重新排列它们,使得 p=[3,5,2,7,1,6,4]p = [3, 5, 2, 7, 1, 6, 4]。然后,f(1,7,3)f(1, 7, 3) 成功。

翻译由 DeepSeek V3 完成

输入解题思路,AI测评打分。不知道怎么写?

首页