P1908 逆序对 题解

news/2024/11/7 20:43:46/

文章目录

    • 题目描述
    • 输入格式
    • 输出格式
    • 样例
      • 样例输入
      • 样例输出
    • 数据范围与提示
    • 完整代码

题目描述

猫猫 TOM 和小老鼠 JERRY 最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计。

最近,TOM 老猫查阅到一个人类称之为“逆序对”的东西,这东西是这样定义的:对于给定的一段正整数序列,逆序对就是序列中 a i > a j a_i>a_j ai>aj i < j i<j i<j 的有序对。知道这概念后,他们就比赛谁先算出给定的一段正整数序列中逆序对的数目。注意序列中可能有重复数字。

Update: 数据已加强。

输入格式

第一行,一个数 n n n,表示序列中有 n n n个数。

第二行 n n n 个数,表示给定的序列。序列中每个数字不超过 1 0 9 10^9 109

输出格式

输出序列中逆序对的数目。

样例

样例输入

6
5 4 2 6 3 1

样例输出

11

数据范围与提示

对于 25 % 25\% 25% 的数据, n ≤ 2500 n \leq 2500 n2500

对于 50 % 50\% 50% 的数据, n ≤ 4 × 1 0 4 n \leq 4 \times 10^4 n4×104

对于所有数据, n ≤ 5 × 1 0 5 n \leq 5 \times 10^5 n5×105

请使用较快的输入输出。

应该不会 O ( n 2 ) O(n^2) O(n2) 过 50 万吧。—— chen_zhe

完整代码

#include <iostream>
using namespace std;
inline int read() {register int x = 1, ans = 0;register char ch = getchar();while (ch < '0' || ch > '9') {if (ch == '-')x = -1;ch = getchar();}while (ch >= '0' && ch <= '9') {ans = (ans << 3) + (ans << 1) + ch - 48;ch = getchar();}return x * ans;
}
long long ans = 0;
int n, a[500001], b[500001];
void mergesort(int l, int r) {if (l == r)return;int mid = l + r >> 1, N = l - 1, lt = l, rt = mid + 1;mergesort(l, mid), mergesort(mid + 1, r);while (lt <= mid && rt <= r) {if (a[lt] <= a[rt])b[++N] = a[lt++];elseb[++N] = a[rt++], ans += mid - lt + 1;}while (lt <= mid) b[++N] = a[lt++];while (rt <= r) b[++N] = a[rt++];for (int i = l; i <= r; i++) a[i] = b[i];
}
int main() {n = read();for (int i = 1; i <= n; i++) a[i] = read();mergesort(1, n);printf("%lld", ans);return 0;
}

http://www.ppmy.cn/news/1209226.html

相关文章

@Autowired注入其他模块的bean失败

一、在Spring Boot中&#xff0c;如果要自动扫描和创建bean&#xff0c;需要在应用的启动类上使用ComponentScan注解来指定要扫描的包。确保你已经将GlobalConfig类所在的包和父包都添加到了ComponentScan注解的value属性中。 例如&#xff0c;如果GlobalConfig类所在的包为com…

gitlab将项目转移到组中

personal 下&#xff0c;选中项目的 setting- transfer project 参考&#xff1a; https://blog.csdn.net/qq_62742127/article/details/130766898#:~:text%E6%89%93%E5%BC%80%E8%A6%81%E8%BD%AC%E7%A7%BB%E7%9A%84%E9%A1%B9%E7%9B%AE%E7%9A%84setting%20%E6%89%93%E5%BC%80Adv…

转转的金融生意经:租机业务年利率达39%,市场竞争下瑕瑜互见

撰稿|行星 来源|贝多财经 在迈上“循环经济产业公司”的转型道路后&#xff0c;一直以二手交易平台闻名的转转集团&#xff08;简称“转转”&#xff09;继“发条分期”“发条借钱”后&#xff0c;又上线了类金融产品“趣租机”。 据介绍&#xff0c;“趣租机”是转转倾力打…

一文搞懂穷举算法

在我们的日常生活中&#xff0c;经常会遇到一些需要解决的小问题&#xff0c;这些问题可能并不需要复杂的算法&#xff0c;但是如果我们能够运用穷举算法的思想&#xff0c;就能够轻松地找到问题的答案。本文将介绍穷举算法的基本思想&#xff0c;并通过程序示例来深入了解它的…

ios 开发问题小集 [持续更新]

文章目录 一、如何给列表上的UITableViewCell添加手势二、获取NSIndexPath的方式2.1 根据row, section 来创建2.2 根据point 的位置来找到 indexPath三、tableView在Grouped样式下,设置表头表尾空白一、如何给列表上的UITableViewCell添加手势 给cell添加手势,大家都会这么做…

LeetCode算法心得——全排列(回溯型排列)

大家好&#xff0c;我是晴天学长&#xff0c;排列型的回溯&#xff0c;需要的小伙伴可以关注支持一下哦&#xff01;后续会继续更新的。&#x1f4aa;&#x1f4aa;&#x1f4aa; 1) .全排列 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按…

前端面试系列之工程化篇

如果对前端八股文感兴趣&#xff0c;可以留意公重号&#xff1a;码农补给站&#xff0c;总有你要的干货。 前端工程化 Webpack 概念 本质上&#xff0c;webpack 是一个用于现代 JavaScript 应用程序的静态模块打包工具。当 webpack 处理应用程序时&#xff0c;它会在内部从一个…

NOIP2023模拟16联测37 D. 小猫吃火龙果

NOIP2023模拟16联测37 D. 小猫吃火龙果 文章目录 NOIP2023模拟16联测37 D. 小猫吃火龙果题目大意思路code 题目大意 有 n n n 个物品 A A A , B B B , C C C &#xff0c; A A A 吃 B B B&#xff0c; B B B 吃 C C C&#xff0c; C C C 吃 A A A&#xff0c;有两种操作…