51NOD---逆序对(树状数组 + 归并排序)
第1行:N,N为序列的长度(n <= 50000)
第2 - N + 1行:序列中的元素(0 <= A[i] <= 10^9)
输出逆序数
4
2
4
3
1
4
树状数组的方法求逆序对
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn = 50005;
int bit[maxn];
int n, q;
struct node {
int i, x;
}arr[maxn];
map<int, int>mp;
int lowbit(int r) {
return r & (-r);
}
void add(int i, int x) {
while(i <= n) {
bit[i] += x;
i += lowbit(i);
}
}
int query(int i) {
int sum = 0;
while(i > 0) {
sum += bit[i];
i -= lowbit(i);
}
return sum;
}
bool cmp(node p, node q) {
return p.x < q.x;
}
/*void output() {
for(int i = 1; i <= n; i++)
cout << bit[i] << " ";
cout << endl;
}
*/
int main() {
cin >> n;
ll ans = 0;
memset(bit, 0, sizeof(bit));
for(int i = 1; i <= n; i++) {
cin >> arr[i].x;
arr[i].i = i;
}
sort(arr + 1, arr + n + 1, cmp);
for(int i = 1; i <= n; i++) {
mp.insert(make_pair(arr[i].i, i));
}
for(int i = 1; i <= n; i++) {
add(mp[i], 1);
//output();
ans += i - query(mp[i]);
}
cout << ans << endl;
return 0;
}
归并排序的方法求逆序对
#include<bits/stdc++.h>
using namespace std;
int n;
int ans;
int arr[50005], temp[50005];
void mergearray(int a[], int l, int mid, int r, int temp[]) {
int i = l, j = mid + 1;
int m = mid, n = r;
int k = 0;
while(i <= m && j <= n) {
if(a[i] <= a[j]) {
temp[k++] = a[i++];
}
else {
temp[k++] = a[j++];
ans += (m + 1) - i;
}
}
while(i <= m) {
temp[k++] = a[i++];
}
while(j <= n) {
temp[k++] = a[j++];
}
for(i = 0; i < k; i++) {
a[l++] = temp[i];
}
}
void mergesort(int a[], int l, int r, int temp[]) {
if(l < r) {
int mid = (l + r) >> 1;
mergesort(a, l, mid, temp);
mergesort(a, mid + 1, r, temp);
mergearray(a, l, mid, r, temp);
}
}
int main() {
cin >> n;
ans = 0;
for(int i = 0; i < n; i++) {
cin >> arr[i];
}
mergesort(arr, 0, n - 1, temp);
cout << ans << endl;
return 0;
}
51NOD---逆序对(树状数组 + 归并排序)的更多相关文章
- [BZOJ 3295] [luogu 3157] [CQOI2011]动态逆序对(树状数组套权值线段树)
[BZOJ 3295] [luogu 3157] [CQOI2011] 动态逆序对 (树状数组套权值线段树) 题面 给出一个长度为n的排列,每次操作删除一个数,求每次操作前排列逆序对的个数 分析 每次 ...
- 洛谷 P1908 逆序对(树状数组解法)
归并排序解法:https://www.cnblogs.com/lipeiyi520/p/10356882.html 题目描述 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不 ...
- 【a703】求逆序对(树状数组的解法)
Time Limit: 10 second Memory Limit: 2 MB 问题描述 给定一个序列a1,a2...an.如果存在i小于j 并且ai大于aj,那么我们称之为逆序对,求给定序列中逆序 ...
- POJ 2299 Ultra-QuickSort 逆序数 树状数组 归并排序 线段树
题目链接:http://poj.org/problem?id=2299 求逆序数的经典题,求逆序数可用树状数组,归并排序,线段树求解,本文给出树状数组,归并排序,线段树的解法. 归并排序: #incl ...
- Bzoj 2141: 排队 分块,逆序对,树状数组
2141: 排队 Time Limit: 4 Sec Memory Limit: 259 MBSubmit: 1310 Solved: 517[Submit][Status][Discuss] D ...
- 求逆序对[树状数组] jdoj
求逆序对 题目大意:给你一个序列,求逆序对个数. 注释:n<=$10^5$. 此题显然可以跑暴力.想枚举1到n,再求在i的后缀中有多少比i小的,统计答案即可.这显然是$n^2$的.这...显然过 ...
- luogu1908 逆序对 树状数组
题目大意:对于给定的一段正整数序列,逆序对就是序列中ai>aj且i<j的有序对.求一段序列的逆序对数. 对于一个数组T,其一个点的值为值与该点下标相等的A序列中点的个数.对T维护一个树状数 ...
- P1908 逆序对——树状数组&离散化&快读快写の学习
题目简述: 对于给定的一段正整数序列,逆序对就是序列中 a_i>a_jai>aj 且 i<ji<j 的有序对. 输出序列中逆序对的数目. 知识补充: 树状数组: 这东西就是 ...
- BZOJ - 3295 动态逆序对 (树状数组套treap)
题目链接 思路和bzoj2141差不多,不过这道题的数据更强一些,线段树套treapT了,树状数组套treap卡过~~ #include<bits/stdc++.h> using name ...
- luogu P1908 逆序对 |树状数组
题目描述 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计.最近,TOM老猫查阅到一个人类称之为"逆序对"的 ...
随机推荐
- springboot管理类,springboot注入类
springboot管理类,springboot注入类 定义一个配置类,添加@Configuration注解,EvaluatorTemplate代表你需要注入的第三方类 @Configuration ...
- 疯子的算法总结(二) STL Ⅰ 算法 ( algorithm )
写在前面: 为了能够使后续的代码具有高效简洁的特点,在这里讲一下STL,就不用自己写堆,写队列,但是做为ACMer不用学的很全面,我认为够用就好,我只写我用的比较多的. 什么是STL(STl内容): ...
- hive分桶表bucketed table分桶字段选择与个数确定
为什么分桶 (1)获得更高的查询处理效率.桶为表加上了额外的结构,Hive 在处理有些查询时能利用这个结构.具体而言,连接两个在(包含连接列的)相同列上划分了桶的表,可以使用 Map 端连接 (Map ...
- [TCP/IP]DNS解析
DNS解析主机的IP地址 host -t A www.baidu.com
- Linux curl 命令详解
命令概要 该命令设计用于在没有用户交互的情况下工作. curl 是一个工具,用于传输来自服务器或者到服务器的数据.「向服务器传输数据或者获取来自服务器的数据」 可支持的协议有(DICT.FILE.FT ...
- Oracle创建设置查询权限用户
用户创建的可以参考博客: https://blog.csdn.net/u014427391/article/details/84889023 Oracle授权表权限给用户: 语法:grant [权限名 ...
- pythonday03数据类型(一)
今日内容 1.整型 2.布尔型 3.字符串 4.补充 5.作业讲解 6,pycharm自动生成头文件 1.整型(int) py2 int/long 32位电脑:-2147483648-21474836 ...
- Rootkit与后门隐藏技术
目录 简介 linux虚拟文件系统VFS rootkit的功能 隐藏文件 基本方法 高级方法 系统调用流程 hook sys_getdents sys_getdents的调用树 最底层的方法 隐藏进程 ...
- ubuntu 输出 log 基础
自定义日志文件 nohup your_command > my_nohup.log 2>&1 & #(将日志输出在my_nohup.log文件中,并将stderr重定向至s ...
- Java 从入门到进阶之路(一)
写在前面:从本片文章开始,将记录自己学习 Java 的点滴路程,目标定的并不是让自己成为一个 Java 高手,而是让自己多掌握一门语言,使自己的知识面更广一些,在学习 Java 的过程中如有不对的地方 ...