[离散化+树状数组]逆序对
来源:互联网 发布:oppo r9怎么改3g网络 编辑:程序博客网 时间:2024/05/29 08:53
看到这道题,我只能想到的思路是大暴力。。。我是蒟蒻。。去看了一下树状数组的介绍,还是半懂不懂,看了题解好长时间,才有点明白。树状数组传送门http://blog.csdn.net/int64ago/article/details/7429868
洛谷P1908传送门
题目描述
猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计。最近,TOM老猫查阅到一个人类称之为“逆序对”的东西,这东西是这样定义的:对于给定的一段正整数序列,逆序对就是序列中ai>aj且i
输入输出格式
输入格式
第一行,一个数n,表示序列中有n个数。
第二行n个数,表示给定的序列。
输出格式
给定序列中逆序对的数目。
输入输出样例
INPUT
6
5 4 2 6 3 1
OUTPUT
11
说明
对于50%的数据,n≤2500
对于100%的数据,n≤40000。
代码如下:
#include<iostream>#include<cstdio>#include<algorithm>using namespace std;const int maxn=40010;int hash[maxn],tree[maxn],n;struct Node{ int v,s;}N[maxn];bool cmp(Node,Node);void up(int,int);int getsum(int);int lowbit(int);int main(){ int i; cin>>n; for(i=1;i<=n;i++){ scanf("%d",&N[i].v); N[i].s=i; } sort(N+1,N+n+1,cmp); for(i=1;i<=n;i++) hash[N[i].s]=i; //离散化结束 long long ans=0; for(i=1;i<=n;i++){ up(hash[i],1); ans+=i-getsum(hash[i]);//求和 } cout<<ans; return 0;}bool cmp(Node a,Node b){ return a.v<b.v;}int lowbit(int x){//树状数组,取最高位 return x&(-x);} void up(int s,int v){ int i; for(i=s;i<=n;i+=lowbit(i)) tree[i]+=v; return;}int getsum(int x){ int temp=0,i; for(i=x;i>=1;i-=lowbit(i)) temp+=tree[i]; return temp;}
0 0
- 树状数组+离散化求逆序对
- [离散化+树状数组]逆序对
- 树状数组+离散化 《求逆序数对》
- 洛谷P1908逆序对(离散化+树状数组)
- POJ 2299 <离散化+树状数组求逆序数对>
- 树状数组求逆序对(要离散化)
- [NOIP2013] 火柴排队 离散化 树状数组 逆序对
- 【codevs4163】 hzwer与逆序对(树状数组+离散化)
- 1020(树状数组,逆序对+离散化)
- 树状数组求逆序对及离散化
- 【求逆序对】CODE[VS] 3286 火柴排队 (树状数组离散化求逆序对)
- 离散化+树状数组求逆序数
- 离散化+树状数组 求逆序对数
- poj2299(离散化+树状数组求逆序)
- 树状数组离散化求逆序数
- 树状数组+ 离散化 求逆序数
- UVA 10810 - Ultra-QuickSort(树状数组+离散化求逆序对)
- poj 2299 Ultra-QuickSort (离散化,树状数组,逆序对)
- Web组件跳转和JSP
- CSRF攻击介绍及防御
- 袁腾飞——夏王朝
- 内部类
- osx10.11下常用命令行工具安装&几个小问题
- [离散化+树状数组]逆序对
- hdoj 5477 A Sweet Journey (二分查找)
- 自我学习
- Java通过管道进行进程间通信
- Leetcode:85. Maximal Rectangle
- Metaspoilt简单攻击操作
- Java数据类型及类型转换
- composer centos下的安装教程
- arp欺骗