逆序对 POJ2299

编程入门 行业动态 更新时间:2024-10-05 15:22:39

<a href=https://www.elefans.com/category/jswz/34/1764023.html style=逆序对 POJ2299"/>

逆序对 POJ2299

逆序对POJ2299

思路

题干在这:POJ2299
我们采用归并排序的方法,边排序边统计逆序对,输出即可。注意边界条件。
有一个坑就是最后的结果超过int范围,我提交WA,还是看了别人的题解才知道是这里有问题……

ac代码

#include<stdio.h>
#include<iostream>
using namespace std;
int in[500001] = { 0 };
int sort[500001] = { 0 };
long long resort = 0;
void mergesort(int x, int y) {   //[x,y)内的归并排序,并统计逆序对if (y - x <= 1)return;int mid = (x + y) / 2;mergesort(x, mid);mergesort(mid, y);int p = x, q = mid, r = x;while (r != y) {if (q == y || p < mid && in[p] <= in[q]) {sort[r] = in[p];r++;p++;}else {sort[r] = in[q];r++;q++;resort += mid - p;}}for (int i = x; i < y; i++) {in[i] = sort[i];}
}
int main() {while (1) {int n;cin >> n;if (n == 0)return 0;memset(in, 0, sizeof(in));memset(sort, 0, sizeof(sort));for (int i = 1; i <= n; i++) {cin >> in[i];}resort = 0;mergesort(1, n + 1);cout << resort << endl;}
}

更多推荐

逆序对 POJ2299

本文发布于:2024-02-19 18:34:34,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1765666.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:逆序

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!