【树状数组】 poj2299 Ultra-QuickSort
来源:互联网 发布:北京爱知科技有限公司 编辑:程序博客网 时间:2024/05/17 23:25
Ultra-QuickSort
题目:http://poj.org/problem?id=2299
题意:给n个数字,每次只能交换相邻两个数字,问最少需要交换多少次可以将n个数字从小到大排序
题解:可以通过模拟冒泡排序发现,对于每个数字,要把它交换到排序后对应的位置,交换次数就等于它的逆序数,即题目等价于求逆序数。
逆序数定义:在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。
代码:
#include<cstring>#include<cstdio>#include<algorithm>using namespace std;#define lowbit(x) ((x)&(-(x)))#define LL long longLL c[500005],b[500005];//c存和,b存逆序数int n;struct node{int value,num;}arr[500005];bool cmp(node x,node y){return x.value<y.value;}LL getsum(int pos){ int x=pos; LL sum=0; for(;x>0;x-=lowbit(x)) sum+=c[x]; return sum;}void update(int pos,int value) //更新pos的值{ int x=pos; for(;x<=n;x+=lowbit(x)) c[x]+=value;}int main(){for(;scanf("%d",&n)&&n;){memset(c,0,sizeof(c)); for(int i=1;i<=n;i++){scanf("%d",&arr[i].value);arr[i].num=i;}sort(arr+1,arr+1+n,cmp);for(int i=1;i<=n;i++){arr[arr[i].num].value=i;//离散化}for(int i=1;i<=n;i++){update(arr[i].value,1);b[i]=i-getsum(arr[i].value);}__int64 ans=0;for(int i=1;i<=n;++i)ans+=b[i];printf("%I64d\n",ans);}return 0;}来源:http://blog.csdn.net/ACM_Ted
- 【树状数组】 poj2299 Ultra-QuickSort
- POJ2299 Ultra-QuickSort(树状数组)
- poj2299 Ultra-QuickSort 树状数组
- POJ2299 Ultra-QuickSort 树状数组
- poj2299 Ultra-QuickSort 树状数组
- POJ2299 Ultra-QuickSort(树状数组)
- POJ2299 Ultra-QuickSort 【树状数组】
- POJ2299 Ultra-QuickSort 【树状数组】+【hash】
- POJ2299 Ultra-QuickSort【树状数组】【逆序数】
- poj2299 Ultra-QuickSort (树状数组+离散化)
- POJ2299 Ultra-QuickSort 树状数组+离散化
- poj2299 Ultra-QuickSort 二叉排序树或树状数组
- poj2299 Ultra-QuickSort 树状数组 + 离散化
- POJ2299 [Ultra-QuickSort] 值域树状数组
- POJ2299-Ultra-QuickSort(树状数组+离散化)
- POJ2299 Ultra-QuickSort(树状数组求逆序数)
- POJ2299:Ultra-QuickSort(树状数组求逆序数)
- POJ2299 Ultra-QuickSort(逆序数问题,树状数组求解)
- MySQL字符集详解
- having
- usb触摸屏驱动移植
- set names utf8 详解
- struts2 <s:form>传递参数问题
- 【树状数组】 poj2299 Ultra-QuickSort
- HDOJ2828-DLX, 重复覆盖小变形
- C/C++ IDE for linux
- 一个高手的htmlparser笔记
- MVC 3.0学习笔记(Controls)
- MFC中文本框的SetSel()函数
- CListCtrl如何获得所选项的内容
- POJ 1279 Art Gallery(半平面交求多边形核)
- 如何让网站看起来更专业?