51nod 1019 逆序数 (树状数组)
2016-11-21 21:09
441 查看
1019 逆序数
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
收藏
关注
在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。
如2 4 3 1中,2 1,4 3,4 1,3 1是逆序,逆序数是4。给出一个整数序列,求该序列的逆序数。
Input
Output
Input示例
Output示例
关于逆序数和本题分析:
http://blog.csdn.net/acm_hmj/article/details/53263971
关于树状数组:
http://blog.csdn.net/acm_hmj/article/details/53223678
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
收藏
关注
在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。
如2 4 3 1中,2 1,4 3,4 1,3 1是逆序,逆序数是4。给出一个整数序列,求该序列的逆序数。
Input
第1行:N,N为序列的长度(n <= 50000) 第2 - N + 1行:序列中的元素(0 <= A[i] <= 10^9)
Output
输出逆序数
Input示例
4 2 4 3 1
Output示例
4
关于逆序数和本题分析:
http://blog.csdn.net/acm_hmj/article/details/53263971
关于树状数组:
http://blog.csdn.net/acm_hmj/article/details/53223678
#include <iostream> #include <algorithm> #include <cstring> #define maxn 50005 using namespace std; long long n,k; long long b[maxn]; // 1 1 1 1 long long c[maxn]; // 1 2 1 4 struct node { long long val;//数值 long long id; //位置 } a[maxn]; bool cmp(node x,node y) //按照数值排序 { return x.val<y.val; } int Lowbit(int n) { return n&(-n); } int sum(int n) //求和 { int ans=0; while(n>0) { ans+=c ; n-=Lowbit(n); } return ans; } void Change(int pos,int num) //修改 { while(pos<=n) { c[pos]+=num; pos+=Lowbit(pos); } } int main() { while(cin>>n) { for(int i=1; i<=n; i++) { cin>>a[i].val; a[i].id=i; b[i]=1; } for(int i=1; i<=n; i++) { c[i]=0; for(int j=i-Lowbit(i)+1; j<=i; j++) c[i]+=b[j]; //b的数状数组 } sort(a+1,a+n+1,cmp); k=0; for(int i=1; i<=n; i++) { k+=sum(a[i].id-1); Change(a[i].id,-1); } cout<<k<<endl; } return 0; }
相关文章推荐
- 51nod:1019 逆序数(树状数组|归并排序|vector)
- 51Nod 1019树状数组离散化
- 树状数组求逆序数
- hdu 5196 DZY Loves Inversions(树状数组,二分法,逆序数)
- HDU 1394 - Minimum Inversion Number(树状数组求逆序数)
- 51Nod 1019 逆序数(归并法求逆序数)
- 树状数组—求逆序数的个数
- 树状数组求逆序数的模板(离散化处理)
- 51nod 1681 公共祖先 | 树状数组
- HDU 2838 (树状数组求逆序数)
- BNU 25586 Mega Inversions【树状数组求逆序数对和正序数对】
- 线段树或树状数组求逆序数
- 逆序数的求法总结(归并、线段树、树状数组、离散化)
- 小朋友排队——树状数组求逆序数
- 逆序数 (树状数组)
- poj 2299 Ultra-QuickSort 树状数组求逆序数
- 树状数组 ( 求逆序数 )——Bubble Sort ( HDU 5775 ) ( 2016 Multi-University Training Contest 4 1012 )
- 【树状数组--求逆序数(离散化)】poj2299 Ultra-QuickSort
- poj 2299 Ultra-QuickSort(树状数组 / 求逆序数)
- 51Nod 1681 公共祖先 [树状数组做法]