POJ 1840 Brainman(逆序对数)
2015-09-10 20:23
369 查看
题目链接:http://poj.org/problem?id=1804
题意:给定一个序列a[],每次只允许交换相邻两个数,最少要交换多少次才能把它变成非递降序列.
思路:题目就是要求逆序对数,我们知道,求逆序对最典型的方法就是树状数组,但是还有一种方法就是Merge_sort(),即归并排序。实际上归并排序的交换次数就是这个数组的逆序对个数,归并排序是将数列a[l,h]分成两半a[l,mid]和a[mid+1,h]分别进行归并排序,然后再将这两半合并起来。在合并的过程中(设l<=i<=mid,mid+1<=j<=h),当a[i<=a[j]时,并不产生逆序数;当a[i]>a[j]时,在前半部分中比a[i]大的数都比a[j]大,将a[j]放在a[i]前面的话,逆序数要加上mid+1-i。因此,可以在归并排序中的合并过程中计算逆序数。
code:
题意:给定一个序列a[],每次只允许交换相邻两个数,最少要交换多少次才能把它变成非递降序列.
思路:题目就是要求逆序对数,我们知道,求逆序对最典型的方法就是树状数组,但是还有一种方法就是Merge_sort(),即归并排序。实际上归并排序的交换次数就是这个数组的逆序对个数,归并排序是将数列a[l,h]分成两半a[l,mid]和a[mid+1,h]分别进行归并排序,然后再将这两半合并起来。在合并的过程中(设l<=i<=mid,mid+1<=j<=h),当a[i<=a[j]时,并不产生逆序数;当a[i]>a[j]时,在前半部分中比a[i]大的数都比a[j]大,将a[j]放在a[i]前面的话,逆序数要加上mid+1-i。因此,可以在归并排序中的合并过程中计算逆序数。
code:
#include <iostream> #include <string.h> #include <stdio.h> using namespace std; const int N = 1005; int a ,tmp ; int 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() { int n,T,tt=1; scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&a[i]); ans = 0; Merge_sort(0,n-1); printf("Scenario #%d:\n%d\n\n",tt++,ans); } return 0; }
相关文章推荐
- Package的Transaction处理之一:使用Connetion的属性RetainSameConnection
- httpd: Could not reliably determine the server's fully qualified domain name
- email program (客户端)演变过程有感
- Email发展历史
- 多线程中让main方法最先开始,最后结束的简单例子
- baiduPOP3/SMTP设置
- wait和nofity
- vector make_pair
- 真机调试的时候出现no identity foundCommand /usr/bin/codesign failed with exit code 1
- async与await
- HDU-3394 Railway
- delegate为什么用ASSIGN 而不是retain
- Email附件下载流程分析
- 一个rails项目连多个mongo数据库
- copy,assign,strong,retain,weak,readonly,nonatomic的区别
- 一个rails项目连多个mongo数据库
- 如何建立二叉搜索树 http://jingyan.baidu.com/article/c910274bfb701ecd361d2deb.html
- hdu 1151 Air Raid 【DAG最小路径覆盖】
- AI小技巧—花朵
- poj 1422&&hdoj 1151 Air Raid