您的位置:首页 > 产品设计 > UI/UE

poj 排序相关之2299 Ultra-QuickSort

2017-06-26 15:16 344 查看
poj 排序相关之2299 Ultra-QuickSort

Accepted 3660K 391MS

最需要注意的是long long的输出是printf(“%lld”,ans);

归并求逆序对的就直接能过,题目实在是没看懂

#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
//#include<math.h>
#include<algorithm>
#include<vector>
#include<map>
#define MAXNUM 500010
#define LL long long
using namespace std;
int n;
int a[MAXNUM], tmp[MAXNUM];
LL ans;
void Merge(int l, int m, int r)
{
int i = l;
int j = m + 1;
int k = l;
while (i <= m && j <= r)
{
if (a[i] > a[j])
{
tmp[k++] = a[j++];
ans += m - i + 1;
}
else
{
tmp[k++] = a[i++];
}
}
while (i <= m) tmp[k++] = a[i++];
while (j <= r) tmp[k++] = a[j++];
for (int i = l; i <= r; i++)
a[i] = tmp[i];
}

void Merge_sort(int l, int r)
{
if (l < r)
{
int m = (l + r) >> 1;
Merge_sort(l, m);
Merge_sort(m + 1, r);
Merge(l, m, r);
}
}
int main(void)
{
//freopen("1.txt", "r", stdin);
int i, j, k;
while (scanf("%d", &n) != EOF&&n != 0)
{
for (i = 0; i < n; i++)
scanf("%d", &a[i]);
ans = 0;

Merge_sort(0, n - 1);
printf("%lld\n", ans);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: