CF1973E.Cat, Fox and Swaps

省选/NOI-

通过率:0%

AC君温馨提醒

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

题目描述

Fox 找到了一组数组 p1,p2,…,pnp_1, p_2, \ldots, p_n,这是一个长度为 nn 的排列,包含了 1,2,…,n1, 2, \ldots, n 这 nn 个数。她想将这些元素按升序排序。Cat 想帮助她——他可以交换数组中任意两个数 xx 和 yy,但只有当 l≤x+y≤rl \leq x + y \leq r 时才允许交换(注意,这个限制是针对元素的值,而不是它们的位置)。他可以进行任意次数这样的交换。

他们还不知道 ll 和 rr 的具体数值,只知道 1≤l≤r≤2n1 \leq l \leq r \leq 2n。

现在给定 nn 和数组 p1,p2,…,pnp_1, p_2, \ldots, p_n,请你计算有多少对整数对 (l,r)(l, r) 满足上述条件,使得在只能交换满足 l≤x+y≤rl \leq x + y \leq r 的两个数的情况下,可以将该排列排序(可以交换任意多次,甚至 00 次)。

†^\dagger 长度为 nn 的排列是指由 11 到 nn 这 nn 个不同整数组成的数组,顺序任意。例如,[2,3,1,5,4][2,3,1,5,4] 是一个排列,但 [1,2,2][1,2,2] 不是(22 出现了两次),[1,3,4][1,3,4] 也不是(n=3n=3 但数组中有 44)。

输入格式

每个测试点包含多组测试数据。第一行包含一个整数 tt(1≤t≤1041 \leq t \leq 10^4),表示测试数据组数。

每组测试数据包含两行。第一行包含一个整数 nn(1≤n≤1051 \leq n \leq 10^5)。

第二行包含 nn 个整数,表示数组 p1,p2,…,pnp_1, p_2, \ldots, p_n(1≤pi≤n1 \leq p_i \leq n)。保证该数组是长度为 nn 的排列。

保证所有测试数据中 nn 的总和不超过 10510^5。

输出格式

对于每组测试数据,输出一个整数,表示满足条件的整数对 (l,r)(l, r) 的数量,其中 1≤l≤r≤2n1 \leq l \leq r \leq 2n,并且在该限制下可以将数组排序。

输入输出样例

  • 输入#1

    7
    2
    2 1
    3
    3 1 2
    4
    3 2 1 4
    5
    5 3 1 2 4
    5
    1 2 3 4 5
    6
    3 2 1 5 4 6
    6
    1 3 2 4 5 6

    输出#1

    6
    11
    23
    29
    55
    46
    58

说明/提示

在第一个样例中,我们需要能够交换 11 和 22,所以必须能交换和为 33 的两个数。恰好有 66 对满足条件:(1,3),(2,3),(3,3),(1,4),(2,4)(1, 3), (2, 3), (3, 3), (1, 4), (2, 4) 和 (3,4)(3, 4),所以答案是 66。

在第二个样例中,满足条件的 1111 对为 (1,4),(1,5),(1,6),(2,4),(2,5),(2,6),(3,4),(3,5),(3,6),(4,5)(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6), (4, 5) 和 (4,6)(4, 6)。例如,如果选择对 (3,4)(3, 4),我们可以先交换 11 和 22,再交换 11 和 33,这样排列就被排序了。

由 ChatGPT 4.1 翻译

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

首页