【POJ2299】Ultra-Quicksort-逆序对
来源:互联网 发布:软件测试必备工具 编辑:程序博客网 时间:2024/06/06 14:12
题目:Ultra-Quicksort
题目大意:给一个数列,要求将其中的数进行升序排列,只能交换两个相邻的数,问最少的移动次数是多少。
做法:经过观察发现,题目要求的就是数列的逆序对的个数,发现这一点后题目就很简单了。
以下是本人代码(树状数组):
#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>#include <algorithm>using namespace std;int q[500010]={0},n;long long ans,c[500010]={0};struct N{ long val,pos;}node[500010]={0};bool cmp(N a,N b){ return a.val<b.val;}int lowbit(int i){ return i&(-i);}int sum(int x){ int s=0; for(int i=x;i>0;i-=lowbit(i)) s+=c[i]; return s;}void add(int x){ for(int i=x;i<=n;i+=lowbit(i)) c[i]++;}int main(){ scanf("%d",&n); while(n!=0) { memset(c,0,sizeof(c));ans=0; for(int i=1;i<=n;i++){ scanf("%ld",&node[i].val); node[i].pos=i;}sort(node+1,node+n+1,cmp);for(int i=1;i<=n;i++) q[node[i].pos]=i;for(int i=1;i<=n;i++){ add(q[i]); ans+=i-sum(q[i]);}printf("%lld\n",ans);scanf("%d",&n); } return 0;}
0 0
- 【POJ2299】Ultra-Quicksort-逆序对
- [POJ2299] Ultra-QuickSort - 逆序对
- poj2299(Ultra-QuickSort)求逆序对
- 逆序数 poj2299 Ultra-QuickSort
- POJ2299 Ultra-QuickSort 归并排序求逆序数对
- POJ2299 Ultra-QuickSort 归并排序求逆序对
- 【poj2299】树状数组求逆序对 Ultra-QuickSort
- poj2299 Ultra-QuickSort--求逆序对+树状数组
- Ultra-QuickSort poj2299 (归并排序 求逆序数对)
- 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(逆序数问题,树状数组求解)
- 欢迎使用CSDN-markdown编辑器
- NOI 2016
- linux中c++编程
- 模仿绘画风格的算法:A Neural Algorithm of Artistic Style
- 查看Apk 运行在多核cpu的那些核心上
- 【POJ2299】Ultra-Quicksort-逆序对
- Linux 系统 /var 目录
- 文章标题
- java数据结构之二叉树
- Android 属性动画(Property Animation) 完全解析 (下)
- **YII**系列三建立表单
- mysql-行锁的实现
- python模块
- SMI Network Management Private Enterprise Codes 查询URL