【题目链接】

点击打开链接

【算法】

本题是一个很经典的问题 : 归并排序求逆序对数,可以用分治算法解决

分治,分而治之,分治算法的思想就是将一个问题转化为若干个子问题,对这些子问题分别求解,最后,

通过子问题的答案反推得到总的答案

通过归并排序求逆序对数的算法流程图如下 :

【代码】

#include <algorithm>
#include <bitset>
#include <cctype>
#include <cerrno>
#include <clocale>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <limits>
#include <list>
#include <map>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <utility>
#include <vector>
#include <cwchar>
#include <cwctype>
#include <stack>
#include <limits.h>
using namespace std;
#define MAXN 1010 int i,T,n,ans;
int a[MAXN]; inline void init()
{
int i;
ans = ;
scanf("%d",&n);
for (i = ; i <= n; i++) scanf("%d",&a[i]);
}
inline void _merge(int l,int r)
{
int i;
int mid = (l + r) >> ;
int t1 = l,t2 = mid + ;
int len = ;
static int tmp[MAXN];
while (t1 <= mid && t2 <= r)
{
if (a[t1] <= a[t2])
{
tmp[++len] = a[t1];
ans += t2 - mid - ;
t1++;
} else
{
tmp[++len] = a[t2];
t2++;
}
}
while (t1 <= mid)
{
tmp[++len] = a[t1];
t1++;
ans += r - mid;
}
while (t2 <= r)
{
tmp[++len] = a[t2];
t2++;
}
for (i = ; i <= r - l + ; i++) a[l+i-] = tmp[i];
}
inline void merge_sort(int l,int r)
{
int mid;
if (l == r) return;
else
{
mid = (l + r) >> ;
merge_sort(l,mid);
merge_sort(mid+,r);
}
_merge(l,r);
}
int main() { scanf("%d",&T);
for (i = ; i <= T; i++)
{
init();
merge_sort(,n);
printf("Scenario #%d:\n",i);
printf("%d\n\n",ans);
} return ; }

最新文章

  1. 【加精】手机话费充值API接口(PHP版)
  2. oracle客户端安装配置 tnsnames.ora文件
  3. Javascript use strict模式和对象
  4. 清空stringbuilder
  5. ELK-Python(三)
  6. 【转】Windows下搭建cvs服务器
  7. poj 2367 Genealogical tree
  8. Collection Operators
  9. 转:USB主机控制器(Host Controller)--深入理解
  10. USB2.0的基本学习
  11. 【译】Yarn上常驻Spark-Streaming程序调优
  12. JavaWeb之Eclipse中使用Maven构建SpringMVC项目
  13. SQL Server-聚焦sp_executesql执行动态SQL查询性能真的比exec好?
  14. 4.Apache POI使用详解
  15. WPF在在设计模式,使用动态样式
  16. python笔记---数据基础类型
  17. Centos7配置TiDB集群
  18. Git同时使用不同平台代码仓库
  19. 导入项目出现: Unable to resolve target ‘android-10′ 解决办法
  20. 微软七届MVP桂素伟:移动互联网与职业规划

热门文章

  1. Project Euler
  2. DB2隔离级别
  3. nginx配置location项的URL匹配规则
  4. [学习资料] Tiny210(S5PV210) u-boot移植
  5. 2. Java中的垃圾收集 - GC参考手册
  6. 87-Moving average of oscillator,移动平均振荡指标.(2015.7.4)
  7. 集训第五周动态规划 J题 括号匹配
  8. C51 继电器 个人笔记
  9. Android BGABadgeView:BGABadgeImageView以及BGABadgeRelativeLayout(4)
  10. React &amp; search &amp; keyboard ghost