hdu 1394(BIT求逆序数)
2015-08-11 23:12
387 查看
题意:有长度为n的序列,序列的数字是0~n-1组成,然后这个序列可以看做环,那么就有n个长度为n的序列,问n个序列里最小逆序数是多少。
题解:先把初始序列的逆序数算出来,然后移动每一个开头数字a到后面,逆序数变化的是比a大的数字逆序数加一,比a小的逆序数减一,所以按这个规律再循环一次找最小值就可以了。
题解:先把初始序列的逆序数算出来,然后移动每一个开头数字a到后面,逆序数变化的是比a大的数字逆序数加一,比a小的逆序数减一,所以按这个规律再循环一次找最小值就可以了。
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N = 5005; int n, C , a ; int lowbit(int x) { return x & (-x); } int Sum(int x) { int ret = 0; while (x > 0) { ret += C[x]; x -= lowbit(x); } return ret; } void Add(int x, int d) { while (x <= n) { C[x] += d; x += lowbit(x); } } int main() { while (scanf("%d", &n) == 1) { memset(C, 0, sizeof(C)); int sum = 0; for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); Add(a[i] + 1, 1); sum += i - Sum(a[i] + 1); } int res = sum; for (int i = 1; i < n; i++) { sum = sum + ((n - 1 - a[i]) - a[i]); res = min(res, sum); } printf("%d\n", res); } return 0; }
相关文章推荐
- 黑马程序员——高新技术---反射
- zoj 2334
- The shortest problem(hdu5373+11的倍数)
- zoj 2334 分类: zoj templates 2015-08-11 23:12 2人阅读 评论(0) 收藏
- C++与C#互调dll的实现步骤
- 归档告警频繁监控脚本
- ViewPager
- 我的前端学习笔记 box-sizing,calc,回调函数
- Java小游戏之打飞机(二)
- C++嵌入Python语言(一):环境搭建及HelloWord程序测试
- 第一百三十一天 how can I 坚持
- IOS 30多个iOS常用动画,带详细注释
- BZOJ 1877: [SDOI2009]晨跑( 最小费用最大流 )
- Maven Web项目构建
- FragmentTabHost
- 通过顶点颜色,制作高级贴图混合效果····
- HDU 1863 畅通工程
- 用条件变量来解决生产者消费者问题
- scala的list源码解密
- jQuery版感应鼠标显示隐藏的菜单