归并排序:

#include <iostream>
#include <vector>
using namespace std;
vector<int>input,tmp(500005);
long long result;void Merge(int left, int middle, int right)
{
int i, j, k;
i = left, j= middle+1, k = 1;
while(i<= middle && j <= right)
{
if(input[j] < input[i])
{
tmp[k++] = input[j++];
result += middle - i + 1;
}
else
tmp[k++] = input[i++];
}
while(i <= middle)  tmp[k++] = input[i++];
while(j <= right) tmp[k++] = input[j++];for(i = left, k = 1; i<= right; i++, k++)
input[i] = tmp[k];
}void MergeSort(int left, int right)
{
if(right > left)
{
int middle = (right + left) / 2;
MergeSort(left,middle);
MergeSort(middle+1,right);
Merge(left,middle,right);
}
}int main()
{
int m,n;
while(cin>>n)
{
if(n==0) break;
for(int i=0;i<n;i++)
{
cin>>m;
input.push_back(m);
}
result = 0;
MergeSort(0,n-1);
cout<<result<<endl;
input.clear();
}
}

树状数组:

#include <iostream>
#include <cstring>
using namespace std;const int MAXN = 10005;
int in[MAXN];
int n;int LowBit(int t)
{
return t&(-t);
}int GetSum(int end)
{
int sum = 0;
while(end > 0)
{
sum += in[end];
end -= LowBit(end);
}
return sum;
}void Plus(int pos, int num)
{
while(pos <= n)
{
in[pos] += num;
pos += LowBit(pos);
}
}int main()
{
int x,sum;
while(cin>>n)
{
memset(in,0,sizeof(in));
sum = 0;
for(int i=1;i<=n;i++)
{
cin>>x;
sum += GetSum(n) - GetSum(x);
Plus(x,1);
}
cout<<sum<<endl;
}
}

转载于:https://www.cnblogs.com/lgh1992314/archive/2013/05/20/5835044.html

归并排序树状数组求逆序数相关推荐

  1. 离散化+树状数组求逆序数

    题目:http://poj.org/problem?id=2299 离散化是一种常用的技巧,有时数据范围太大,可以用来放缩到我们能处理的范围 因为其中需排序的数的范围0--- 999999999:显然 ...

  2. poj 2299 Ultra-QuickSort(树状数组求逆序数+离散化)

    题目链接:http://poj.org/problem?id=2299 Description In this problem, you have to analyze a particular so ...

  3. hdu 1394(树状数组求逆序数)

    解题思路:这道题是求循环数组中逆序数最小值,求逆序数这里肯定是用树状数组.只是这里有一点点变化,由于题目中n位数是0-n-1的一个排列,所以num[i]可表示为比num[i]小的数的个数.把第一位的数 ...

  4. HDU 2838 Cow Sorting(双树状数组+求逆序数)

    Problem Description Sherlock's N (1 ≤ N ≤ 100,000) cows are lined up to be milked in the evening. Ea ...

  5. Japan树状数组求逆序数

    http://poj.org/problem?id=3067 给出一个序列 a1 a2 a3 ···an 问此序列中逆序对的个数? 逆序对:i<j,ai>aj 方法:就是用树状数组搞,从后 ...

  6. HDU 4911 Inversion 树状数组求逆序数对

    显然每次交换都能降低1 所以求出逆序数对数,然后-=k就好了.. . _(:зゝ∠)_ #include<stdio.h> #include<string.h> #includ ...

  7. Swaps and Inversions hdu多校训练第二场 树状数组求逆序数+离散化

    http://acm.hdu.edu.cn/showproblem.php?pid=6318 交换相邻的元素,有几个逆序对,就交换几次使其变成顺序对 #include<bits/stdc++.h ...

  8. 牛客练习赛33 D tokitsukaze and Inverse Number (树状数组求逆序对,结论)

    链接:https://ac.nowcoder.com/acm/contest/308/D 来源:牛客网 tokitsukaze and Inverse Number 时间限制:C/C++ 1秒,其他语 ...

  9. loj #535. 「LibreOJ Round #6」花火 树状数组求逆序对+主席树二维数点+整体二分...

    $ \color{#0066ff}{ 题目描述 }$ 「Hanabi, hanabi--」 一听说祭典上没有烟火,Karen 一脸沮丧. 「有的哦-- 虽然比不上大型烟花就是了.」 还好 Shinob ...

最新文章

  1. 求二叉树第K层的节点个数+求二叉树叶子节点的个数
  2. Scala println的实现原理调试
  3. 中点和中值滤波的区别_桥式整流二极管及滤波电容如何选择
  4. 视频专辑:JAVA语言入门视频教程
  5. 使用Pack200压缩你的代码
  6. 【排序算法】选择排序
  7. 201771010130 王志成《面向对象程序设计(java)》第十八周学习总结
  8. 设计不难学,这10款软件总有一款适合你
  9. SCL编写的阀门块实例
  10. 杭州电子科技大学计算机考研资料汇总
  11. 京东打单发货如何识别疫情地区?
  12. 15.在springboot中的事务处理
  13. Android搜索框searchView的使用
  14. 已知有十六支男子足球队参加2008 北京奥运会。 写一个程序,把这16 支球队随机分为4 个组,每组4只球队。采用List集合和随机数。
  15. 怎么用计算机来玩反恐精英,你第一次去网吧是为了玩什么游戏?网友:反恐精英一直到英雄联盟...
  16. Discuz论坛系统
  17. android系统目录,详解安卓系统各目录
  18. 水气泵控制原理,三角波发生电路,LM331M/TR芯片,高速运放芯片
  19. android五子棋论文,毕业论文-基于Android五子棋的设计与实现.doc
  20. 《经济机器如何运转》笔记

热门文章

  1. 轮距和轴距有什么区别_为什么很多国产车都设计得窄高窄高的,是为了节省成本吗?...
  2. 介绍SLICEM里的LUT如何形成RAM资源
  3. java显示服务器端ip,Java服务器获取客户端的ip
  4. 使用直流稳压电源时的注意事项!
  5. easyopen原理解析——不到100行代码实现一个最精简的easyopen
  6. jQuery 之 serialize() serializeArray()
  7. VS asp.net 连接64位oracle 11g
  8. 08Spring_Spring和junit测试集成
  9. [Android]转-Android 中的拿来主义(编译,反编译,AXMLPrinter2,smali,baksmali)!
  10. 对textfield的键盘改造成滚动选择器而不是输入键盘