HDU 1394 Minimum Inversion Number
2015-08-13 19:39
435 查看
本题是一道并查集经典题 因为输入的数字在0~n-1之间所以所求最小逆序数可用并查集求出(归并也可以我只给出并查集的代码
并查集就是把一个数据直接往父节点上链接 最终是有多少相关就有多少棵树
)
并查集就是把一个数据直接往父节点上链接 最终是有多少相关就有多少棵树
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> using namespace std; const int N=5005; const int inf=99999999; int c ; int a ; int lowbit(int x){ return x&(-x); } void update(int x){ while(x<N){ c[x]++; x+=lowbit(x);//寻找到根节点 } } int get_sum(int x){ int ans=0; while(x>0){ ans+=c[x]; x-=lowbit(x); } return ans; } int main() { int n, i, j, k; while(scanf("%d",&n)==1){ memset(c,0,sizeof(c)); int num=0; for(i=1;i<=n;i++){ scanf("%d",&a[i]); a[i]++; num+=get_sum(N-1)-get_sum(a[i]); update(a[i]); } int minh=inf; for(i=1;i<=n;i++) { num=num-(a[i]-1)+(n-a[i]); minh=min(minh,num); } printf("%d\n",minh); } }
)
相关文章推荐
- NodeJs使用json web token验证REST服务
- 深入JavaScript(10)面向对象编程之概论
- 什么事TCP链接的三次握手
- POJ 1470 Closest Common Ancestors
- hdu 1301 jungle roads
- NSObject的load和initialize方法
- 编译过程的那些事儿
- Java模板方法的设计模式
- android/bitmap.h 详解
- 深入JavaScript(9)函数
- linux(Debian)下安装与MySql的安装、卸载、配置及使用
- 引跑科技助力传统企业构建大数据价值体系
- char,varchar,nvarchar区别
- A.1.17
- Spring的事务管理
- 推荐系统——冷启动问题
- HDOJ-1863-畅通工程
- 引跑科技助力传统企业构建大数据价值体系
- linux下运行c或c++
- OC 将汉语数字转换成阿拉伯数字