逆序对的求法(树状数组)
来源:互联网 发布:yy网络直播间 编辑:程序博客网 时间:2024/05/18 01:58
设A[1...n]是一个包含n个不同数的数组,如果在i<j的情况下,有A[i]>A[j],则(i,j)就称为A中的一个逆序对。
求法有两种,一种是归并排序,一种是树状数组。二者的时间复杂度都是O(n*logn),但树状数组更加好写。
思路:开一个树状数组A记录每一个数出现的次数。倒序输入,每输入一个数num就在A中加1,同时求一下从0到num-1的前缀和。
#include <iostream>using namespace std;void AddNum(int * arr, int iArrSize, int iIndex, int iNum){for (int i = iIndex; i <= iArrSize; i += (i & (-i)))arr[i] += iNum;}int GetSum(int * arr, int iIndex){int iAns = 0;for (int i = iIndex; i; i -= (i & (-i)))iAns += arr[i];return iAns;}int main(){int iNumTot, arrSum[1010] = { 0 }, arrNum[1010] = { 0 };cin >> iNumTot;int iAns = 0;for (int i = 1; i <= iNumTot; i++)cin >> arrNum[i];for (int i = iNumTot; i >= 1; i--){AddNum(arrSum, 1000, arrNum[i], 1);iAns += GetSum(arrSum, arrNum[i] - 1);}cout << iAns << endl;return 0;}
阅读全文
0 0
- 逆序对的求法(树状数组)
- 树状数组逆序对
- 树状数组的简单应用(求逆序对个数)
- 蒜头君的排序(树状数组维护逆序对)
- 逆序对的递归求法
- 求逆序对 (树状数组版)
- POJ3067(树状数组逆序对)
- 逆序对(树状数组/归并)
- 洛谷P1908 逆序对(树状数组)
- hihoCoder 1524 : 逆序对 (树状数组)
- 1003(树状数组+逆序对)
- poj1007 树状数组逆序对
- 树状数组求逆序对
- 树状数组求逆序对
- 树状数组求逆序对
- 树状数组求逆序对
- 树状数组求逆序对
- 逆序对-树状数组-1
- echarts 仪表图-实例
- Linux sort命令使用示例
- 【Hibernate】的cascade属性
- java 搭建spring核心框架
- python 二叉树的相关实现
- 逆序对的求法(树状数组)
- pip、virturalenv、supervisor学习使用
- 疯狂队列
- 一次关于mongodb性能踩坑的总结
- 大型网站技术架构(六)--网站的伸缩性架构
- SecureCRT & SecureFX
- Cinder-Volume如何实现AA高可用——分布式锁及其在OpenStack上的应用
- macvlan 网络隔离和连通
- 数组