POJ 2299 Ultra-QuickSort
2016-04-17 09:39
429 查看
Ultra-QuickSort
Description
In this problem, you have to analyze a particular sorting algorithm. The algorithm processes a sequence of n distinct integers by swapping two adjacent sequence elements until the sequence is sorted in ascending order. For the
input sequence
9 1 0 5 4 ,
Ultra-QuickSort produces the output
0 1 4 5 9 .
Your task is to determine how many swap operations Ultra-QuickSort needs to perform in order to sort a given input sequence.
Input
The input contains several test cases. Every test case begins with a line that contains a single integer n < 500,000 -- the length of the input sequence. Each of the the following n lines contains a single integer 0 ≤ a[i] ≤ 999,999,999,
the i-th input sequence element. Input is terminated by a sequence of length n = 0. This sequence must not be processed.
Output
For every input sequence, your program prints a single line containing an integer number op, the minimum number of swap operations necessary to sort the given input sequence.
Sample Input
Sample Output
求逆序数,和 http://blog.csdn.net/sdfgdbvc/article/details/51171769 这题一模一样,可以复习一下
Time Limit: 7000MS | Memory Limit: 65536K | |
Total Submissions: 52744 | Accepted: 19331 |
In this problem, you have to analyze a particular sorting algorithm. The algorithm processes a sequence of n distinct integers by swapping two adjacent sequence elements until the sequence is sorted in ascending order. For the
input sequence
9 1 0 5 4 ,
Ultra-QuickSort produces the output
0 1 4 5 9 .
Your task is to determine how many swap operations Ultra-QuickSort needs to perform in order to sort a given input sequence.
Input
The input contains several test cases. Every test case begins with a line that contains a single integer n < 500,000 -- the length of the input sequence. Each of the the following n lines contains a single integer 0 ≤ a[i] ≤ 999,999,999,
the i-th input sequence element. Input is terminated by a sequence of length n = 0. This sequence must not be processed.
Output
For every input sequence, your program prints a single line containing an integer number op, the minimum number of swap operations necessary to sort the given input sequence.
Sample Input
5 9 1 0 5 4 3 1 2 3 0
Sample Output
6 0
求逆序数,和 http://blog.csdn.net/sdfgdbvc/article/details/51171769 这题一模一样,可以复习一下
//归并排序 #include <stdio.h> #define MAX 500005 int N; int a[MAX], b[MAX]; long long sum; void Merge(int start, int mid, int end) { int i = start, j = mid + 1, k = start; while(i <= mid && j <= end) { if(a[i] <= a[j]) { b[k++] = a[i++]; } else { sum += j - k; b[k++] = a[j++]; } } while(i <= mid) { b[k++] = a[i++]; } while(j <= end) { b[k++] = a[j++]; } for(i = start; i <= end; i++) a[i] = b[i]; } void MergeSort(int start, int end) { if(end > start) { int mid = (start + end) / 2; MergeSort(start, mid); MergeSort(mid+1, end); Merge(start, mid, end); } } int main() { int i; while(scanf("%d", &N) && N) { sum = 0; for(i = 0; i < N; i++) scanf("%d", &a[i]); MergeSort(0, N-1); printf("%lld\n", sum); } return 0; } /* //树状数组 #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 500005 int N; int tree[MAX], f[MAX]; struct P { int v; int num; } pro[MAX]; int cmp(const void *a, const void *b) { return (*(P*)a).v - (*(P*)b).v; } int lowbit(int x) { return x & -x; } void updata(int n, int x) { while(n <= N) { tree += x; n += lowbit(n); } } int find(int n) { int sum = 0; while(n >= 1) { sum += tree ; n -= lowbit(n); } return sum; } int main() { int i; long long sum; while(scanf("%d", &N) != EOF && N) { sum = 0; memset(tree, 0, sizeof(tree)); for(i = 1; i <= N; i++) { scanf("%d", &pro[i].v); pro[i].num = i; } qsort(pro+1, N, sizeof(pro[1]), cmp); int id = 1; f[pro[1].num] = 1; for(i = 2; i <= N; i++) { if(pro[i].v == pro[i-1].v) f[pro[i].num] = id; else f[pro[i].num] = ++id; } for(i = 1; i <= N; i++) { updata(f[i], 1); sum += i - find(f[i]); } printf("%lld\n", sum); } return 0; }*/
相关文章推荐
- 第一次接触JS require.js模块化工具
- 多线程的队列BlockingQueue
- 从BlueSky.h和BlueSky.cpp到BlueSky.out的那些事儿
- SOAPUI笔记1: window安装
- 限制UITextField的最大输入字符数
- Juel 表达式使用
- Juel 表达式使用
- 想学微信的界面设计,来看看WeUI的暴力美学
- HDU 5667 Sequence
- hdu5667 Sequence 【矩阵快速幂+欧拉函数降次】
- LeetCode 300. Longest Increasing Subsequence(最长递增子序列)
- 解决 MySQL 5.7 中 Your password does not satisfy the current policy requirements. 问题
- Request介绍及示例 PART1
- StringBuilder StringBuffer
- HDU 5667 Sequence (矩阵快速幂 + 费马小定理)
- BC #80 C Sequence(指数矩阵快速幂)
- String,StringBuffer,StringBuilder之间的区别
- EasyUI体验-分页多选,选项保留,以及历史记录相结合的保留
- LeetCode 298. Binary Tree Longest Consecutive Sequence(二叉树最长连续序列)
- HDU 5667 :Sequence