ZOJ-2386
来源:互联网 发布:matlab 矩阵变cell 编辑:程序博客网 时间:2024/05/16 13:07
问题可转化为求逆序对数,感觉用O(N^2)的排序算法会超时,没试过,我是用的归并排序,在排序的同时统计逆序对,注意merge的时候那个统计的逻辑,还有结果用long long 存,否则溢出,这题暂时排名第一,感觉良好,哈哈
#include<stdio.h>#include<string.h>static int array[500000];static long long res;static void merge(int *a, int begin, int mid, int end){int i = begin, j = mid + 1, index = 0;while (i <= mid && j <= end)if (a[i] <= a[j])array[index++] = a[i++];else{array[index++] = a[j++];res += mid - i + 1;//main point!!!}if (i > mid)while (j <= end)array[index++] = a[j++];if (j > end)while (i <= mid)array[index++] = a[i++];memcpy(a + begin, array, index * sizeof(int));}static void merge_sort(int *a, int begin, int end){if (begin == end)return;else if (begin + 1 == end){if (a[begin] > a[end]){int temp = a[begin];a[begin] = a[end];a[end] = temp;res++;}}else{int mid = (begin + end) / 2;merge_sort(a, begin, mid);merge_sort(a, mid + 1, end);merge(a, begin, mid, end);}}int main(){int n, a[500000];while (scanf("%d", &n), n){int i;for (i = 0; i < n; i++)scanf("%d", &a[i]);res = 0;merge_sort(a, 0, n - 1);printf("%lld\n", res);}return 0;}
0 0
- ZOJ-2386
- ZOJ 2386 归并排序
- zoj 2386 - Ultra-QuickSort
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- c语言_lesson_4 数组和指针
- 指针数组-个人体会
- python2.5版本中实现简单的json模块
- 环形缓冲区,魔戒lordrings,boost的circular_buffer
- OCP 1Z0 051 129
- ZOJ-2386
- mysql explain的详解
- 第14周程序阅读2(2)
- 讲解游戏开发与项目下的hdpi 、mdpi与ldpi资源文件夹以及游戏高清版本的设置
- java参数传递机制浅析
- viewflipper实现幻灯片的简单播放
- python实现虎扑网站图片爬虫
- n&(n-1) 与 n&-n
- 深入理解DIP、IoC、DI以及IoC容器