给定整数 n 和一个 1∼n 的排列 p.
你可以对排列 p 进行下列操作任意次:
选择整数 i, j(1 ≤ i < j ≤ n),然后交换 pi, pj​ 的值.
你需要求出至少需要进行上述操作多少次才能使 p 恰有一个逆序对.
每个测试点包含 t 组数据.
1≤t≤1e4, 2≤n, ∑n≤2e5.

建边 i -> i 在 p 中出现的位置(下标), 这张图一定是若干个环.
操作等价于交换两个节点的后继节点,每次操作至多只会使环数 + 1,
1~n 顺序排列对应图的环数为 n, 则对 p 进行排序至少需要 K = n − 环数 K = n - 环数 K=n−环数 次操作.
考虑原问题,若建图后存在两相邻编号节点在同一环内, 则答案为 K + 1.
否则答案为 K - 1.

代码如下:

#include <bits/stdc++.h>using namespace std;inline int read() {int x = 0, f = 0; char ch = getchar();while (!isdigit(ch)) f = ch == '-', ch = getchar();while (isdigit(ch)) x = (x << 3) + (x << 1) + (ch ^ 48), ch = getchar();return f ? -x : x;
}const int N = 2e5 + 10;
int n, a[N], nex[N], st[N]; void work() {n = read(); for (int i = 1; i <= n; ++i) a[i] = read(), nex[a[i]] = i, st[i] = 0; int cnt = 0, flag = 1; for (int i = 1; i <= n; ++i) {if (!st[i]) {++cnt; int now = i; st[now] = cnt; while (!st[nex[now]]) now = nex[now], st[now] = cnt; }}for (int i = 1; i < n; ++i) if (st[i] == st[i + 1]) flag = -1;printf("%d\n", n - cnt + flag);
}int main() {int t = read(); while (t--) work(); return 0;
}

CF1768D Lucky Permutation相关推荐

  1. CodeForces - 287C Lucky Permutation(构造)

    题目链接:点击查看 题目大意:构造一个合法的排列,满足 ppi=n−i+1p_{p_{i}}=n-i+1ppi​​=n−i+1 题目分析:因为第四个样例的存在降低了本题的难度,不然感觉还是有点难度的一 ...

  2. CF#303A Lucky Permutation Triple 数论

    题意:要求给出一个数N的余数系的三个排列A, B, C,其中使得对于任意的 i 满足(A[i] + B[i]) % N = C[i]. 例如N=5的时候有一下排列: A: 1 4 3 2 0 B: 1 ...

  3. Codeforces Round #183 (Div. 2) C

    思维题,想到就秒杀,没想到或者想错方向了那么就完蛋了 0 1 2 3 4 1 2 3 4 0 你就会发现是可以的. 我经历了很久错误的思维,找到了一些性质 1.  ai+bi的和一定为一串从(n/2) ...

  4. Codeforces Round #183 (Div. 2)

    A. Pythagorean Theorem II 暴力,\(O(n^2)\). B. Calendar 每个日期计算到0年1月1日的天数,相当于转化成前缀和形式. 闰年数计算\[\lfloor\fr ...

  5. CQUCQUPT联合狂欢赛小结

    概述:今天25道题,AC了11道,不到一半的题.惭愧惭愧.不过还是颇有收获的.就AC题目和今晚补的题做些小结 狂欢赛链接:http://acm.hust.edu.cn/vjudge/contest/v ...

  6. Codeforces Round #842 (Div. 2) 个人题解

    A. Greatest Convex 题意: 给t组数据,每组数据给定一个k,求出在[1,k)范围内,满足x!+(x-1)!%k==0的最大x 题解: 赛中可以通过观察法得知输出k-1即可,赛后可以尝 ...

  7. Circle of Mistery 2023牛客暑期多校训练营5 B

    登录-专业IT笔试面试备考平台_牛客网 题目大意:给出一个n个数的数组a,求一个排列,使其形成的其中一个置换环上的数的和>=k,并使产生的逆序对数量最少 1<=n<=1e3;-1e6 ...

  8. hihocoder 1152 Lucky Substrings

    #1152 : Lucky Substrings 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 A string s is LUCKY if and only if t ...

  9. 【C++】C++11 STL算法(七):排列操作(Permutation operations)、数值操作(Numeric operations)

    排列操作(Permutation operations) 一.is_permutation 1.原型: template< class ForwardIt1, class ForwardIt2 ...

最新文章

  1. linux的 计划任务机制,自己带节奏
  2. 分别用Eigen和C++(OpenCV)实现图像(矩阵)转置
  3. js调用ios和安卓方法
  4. ASP.NET Web API 特性
  5. RabbitMQ队列持久化
  6. 应用程序添加到服务器,在同一应用程序中的配置服务器和eureka服务器:尝试连接到localhost:8761...
  7. Des与3Des加密解密
  8. WEY的广告上天了!CZ-11 WEY号火箭发射成功
  9. eclipse报错:“start ruble bundle manager”解决方法
  10. python变量赋值给数组_python 变量,数组,字符串
  11. SQL 四舍五入 同时取规定小数位的数值
  12. 编程语言EF速度测试(4):nsieve-bits
  13. OpenCV_Corner Detect with FastFeatureDetector(基于FAST的角点检测) 及 SUSAN算子
  14. 苹果4怎么越狱_它的维生素C含量是苹果的4倍,是我国第4大主粮,土豆怎么种植的...
  15. Autoit+selenium+python实现文件上传功能
  16. DCMM讲的数据“需求管理”,是什么?管理目标?如何实现?
  17. Tiki靶机(CMS漏洞)
  18. 1.1.26 word内容导入PPT
  19. 中兴换头;任正非表态中美差距还有 50 年;Google 回应隐私丑闻 | CSDN 极客头条...
  20. 小米笔记本电脑怎么使用U盘重装系统教学

热门文章

  1. 陈年旧事(一个关于成长的故事)【原创】
  2. 【量化】基于聚宽实现MACD均线择时策略
  3. python的算法语句_python-算法基础--1
  4. html网页设计课程心得,网页制作学习心得5篇.doc
  5. 【散文】 一个人的旅行
  6. WinEdt 6.0更改字体或字号技巧
  7. 纯小白为了实现Camelyon16 数据集的分割和特征提取(基于CLAM的代码和AutoDL服务器)所走的弯路
  8. 常见用户行为分析模型解析
  9. ListPopupWindow Overly透明遮罩效果
  10. 修改sublime3注释的颜色