树状数组 Ultra-QuickSort 离散化+逆序数
来源:互联网 发布:usb共享电脑网络给手机 编辑:程序博客网 时间:2024/06/18 07:50
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.
Ultra-QuickSort produces the output
Your task is to determine how many swap operations Ultra-QuickSort needs to perform in order to sort a given input sequence.
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.
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.
59105431230
60
一个数列靠相邻两个交换的方法变成正序 就是求他的逆序数 没想明白为什么
统计逆序数的方法就是query(i) sum+=i-query(i)query(i)查询到比当前数小的数 i-query(i)就是比当前数大的数比如下标 1 2 3 4 5 值 0 0 0 0 0插入个5把 这是逆序数为1-query(5)=0 不存在 下标 1 2 3 4 5 值 0 0 0 0 1插入个2把 这是逆序数为2-query(2)=1 下标 1 2 3 4 5 值 0 1 0 0 1
然而这个题要用离散化
#include <iostream>#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;const int maxn=500005;int a[maxn],c[maxn];int n;struct org{ int v, f;}b[maxn];int cmp(org a,org b){ return a.v<b.v;}int lowbit(int i){ return i&(-i);}int update(int i,int x){ while(i<=maxn) { c[i]=c[i]+x; i=i+lowbit(i); } //cout<<"1"<<endl;}int query(int i){ int sum=0; while(i>0)
{ sum+=c[i]; i=i-lowbit(i); } return sum;}int main(){ while(~scanf("%d",&n)&&n) { memset(c,0,sizeof(c)); for(int i=1;i<=n;i++) { scanf("%d",&b[i].v); b[i].f=i; } sort(b+1,b+n+1,cmp); for(int i=1;i<=n;i++) { a[b[i].f]=i; } long long sum=0; for(int i=1;i<=n;i++) { update(a[i],1); sum+=i-query(a[i]); } cout<<sum<<endl; } return 0;}
阅读全文
0 0
- Ultra-QuickSort(离散化+树状数组求逆序数)
- 10810-Ultra-QuickSort【逆序数、树状数组离散化】
- 树状数组 Ultra-QuickSort 离散化+逆序数
- 【树状数组】poj2299 Ultra-QuickSort(离散化+树状数组求逆序数)
- poj2299 Ultra-QuickSort&&NYOJ117 求逆序数 (树状数组求逆序对数+离散化)+(归并排序)
- Ultra-QuickSort(树状数组+离散化+求逆序)
- POJ2299 Ultra-QuickSort——树状数组求逆序数+离散化
- poj2299 Ultra-QuickSort(树状数组求逆序数,离散化)
- POJ 2299 Ultra-QuickSort (树状数组求逆序数+离散化)
- poj 2299 Ultra-QuickSort(树状数组求逆序数+离散化)
- poj 2299 Ultra-QuickSort(树状数组求逆序数+离散化)
- poj 2299 Ultra-QuickSort(树状数组求逆序数+离散化)
- 树状数组 离散化 求逆序数POJ 2299Ultra-QuickSort解题报告
- POJ 2299 Ultra-QuickSort(树状数组+离散化—求逆序数)
- poj2299 Ultra-QuickSort(离散化+树状数组求逆序数)
- poj 2299 Ultra-QuickSort 树状数组求逆序数 离散化
- POJ 2299 Ultra-QuickSort (树状数组求逆序数 || 线段树 +离散化)
- 【树状数组--求逆序数(离散化)】poj2299 Ultra-QuickSort
- 写给大数据开发初学者的话2
- ExpandableListView动态编辑 item出现convertView 复用错乱问题
- 守护进程的模拟实现(daemon)
- smtplib发送带SSL认证的邮箱系统
- Redis与Memcached的区别
- 树状数组 Ultra-QuickSort 离散化+逆序数
- 关于Android退出程序清空私密文件的那些事
- ubuntu 8000端口被占用
- Nginx负载均衡的4种方案配置实例
- Shadowsocks non-UI Error解决办法
- vi和vim的区别
- Xcode8.3.3 出现 Could not locate device support files解决办法
- Android7.0中文文档(API)-- AbsListView.OnScrollListener
- ORACLE 性能优化-查询数据库慢SQL(其实还是awr和ash报告更方便~)