题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394

题意:给你一个0 — n-1的排列,对于这个排列你可以将第一个元素放到最后一个,问你可能得到的最多逆序对的个数

求出原始序列的逆序对的数目,然后进行n-1次将第一个元素放到最后一个的操作,每次操作后可以用O(1)复杂度求得新序列的逆序对数目

此题的关键点在于求出原始序列逆序对的数目,可以使用树状数组, 线段树, 归并等方法。

下面是树状数组的解法

#include <iostream>
#include <cstdio>
#include <algorithm>
#define maxn 5010
using namespace std;int c[maxn], arr[maxn], n;int lowbit(int x);void add(int x, int u);int sum(int x);int main(void)
{while (scanf("%d", &n) != EOF){int ans = 0;memset( c, 0, sizeof(c));for (int i = 0; i < n; ++i){scanf("%d", arr + i);arr[i] += 1;ans += i - sum( arr[i]);add( arr[i], 1);}int pre = ans, tmp;for (int i = 0; i < n - 1; ++i){tmp = pre - (arr[i] - 1) + (n - arr[i]);ans = min( ans, tmp);pre = tmp;}printf("%d\n", ans);}return 0;
}int lowbit(int x)
{return x&(-x);
}int sum(int x)
{int result = 0;while (x > 0){result += c[x];x -= lowbit(x);}return result;
}void add(int x, int u)
{while (x <= n){c[x] += u;x += lowbit(x);}
}

转载于:https://www.cnblogs.com/chuninsane/p/4929433.html

hdu 1394 Minimum Inversion Number(树状数组)相关推荐

  1. HDU - 1394 Minimum Inversion Number(树状数组)

    题目链接:点击查看 题目大意:线段树求逆序数,给出的数列可以组成环,问怎么样求可以让逆序数最小,输出最小值 题目分析:看到这个题的第一反应是暴力枚举5000种情况,因为感觉这个题的N给的不是很大,但是 ...

  2. HDU 1394 Minimum Inversion Number(线段树的单点更新)

    点我看题目 题意 :给你一个数列,a1,a2,a3,a4.......an,然后可以求出逆序数,再把a1放到an后,可以得到一个新的逆序数,再把a2放到a1后边,,,,,,,依次下去,输出最小的那个逆 ...

  3. 逆序数2 HDOJ 1394 Minimum Inversion Number

    题目传送门 1 /* 2 求逆序数的四种方法 3 */ 1 /* 2 1. O(n^2) 暴力+递推 法:如果求出第一种情况的逆序列,其他的可以通过递推来搞出来,一开始是t[1],t[2],t[3]. ...

  4. HDU 5517---Triple(二维树状数组)

    题目链接 Problem Description Given the finite multi-set A of n pairs of integers, an another finite mult ...

  5. POJ 3928 hdu 2492 Uva1428 PingPong 【树状数组】

    Ping pong                                                   Time Limit: 2000/1000 MS (Java/Others)   ...

  6. HDU 3584 Cube (三维树状数组)

    Problem Description Given an N*N*N cube A, whose elements are either 0 or 1. A[i, j, k] means the nu ...

  7. hdu 5157(manacher+前缀和+树状数组)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5157 解题思路: 我们可以先用mancher算法对字符串进行处理,把以每个点为中心的回文串半径求出来, ...

  8. hdu 6447YJJ's Salesman 离散化+树状数组+DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6447 因为图中点的坐标值过大,达到1e9.然而只有1e5个点.所以先将其离散化.并按照<x.y& ...

  9. [HDU - 2852] KiKi's K-Number (树状数组+二分)

    链接 http://acm.hdu.edu.cn/showproblem.php?pid=2852 题意 现在需要你对一个空序列做nnn次操作,操作分三种 0x0\ \ x0  x :向序列中加入一个 ...

  10. HDU - 5775 - Bubble Sort( 树状数组 + 思维 )

    题目链接:点击进入 题目 题意 问在给出的冒泡排序过程中,一个数到达的最右边位置与最左边位置距离差. 思路 对于一个数,位置 i ,假设右边比它小的数有 r 个,左边比它大的数有 l 个,最右边到达的 ...

最新文章

  1. 教你如何运用python实现学生信息管理系统
  2. Table '' is marked as crashed and should be repaired 解决方法
  3. 【NLP】CS224N课程笔记|词向量I: 简介, SVD和Word2Vec
  4. 分布式系统关注点(9)——想通关「限流」?只要这一篇
  5. Eclipse+MyEclipse+Tomcat平台搭建步骤
  6. VC++静态文本框/PICTURE控件的notify属性
  7. java-servlet
  8. 推送ActivityFeed到Teams
  9. WebApp 里Meta标签大全
  10. Apriori进行关联分析
  11. Bootstrap页面布局17 - BS选项卡
  12. Spring学习总结(14)——Spring10种常见异常解决方法
  13. 区块链现状:最初的炒作消退,将迎来大量新应用(第一部分)
  14. 封城第12日,冰箱都快塞不下咯(附菜谱分享)
  15. 看图说话,FastJson 并没有那么流行!
  16. 微波烹调,营养损失多or少?
  17. nuxt 中 vuex 路由鉴权 keeplive
  18. 外卖订单语音通知功能如何实现?(附外卖订单语音通知模板)
  19. 常见计算机类杂志投稿方式
  20. matlab去除图片水印_求帮忙,我想找到用matlab编程的数字水印系统,可以实现给图片加水印,并且防止攻击,最后提取水印信息...

热门文章

  1. java原码、补码、反码总结
  2. [LeetCode]50.Pow(x, n)
  3. Android进程与线程基本知识
  4. 推荐几个rpm下载站点
  5. Nginx 的 server_names_hash_bucket_size 问题
  6. 7 centos 查看程序文件数量_MongoDB最大连接数(centos7应用程序最大打开文件数)设置失效的异常分析过程与解决方法...
  7. Unity app调试
  8. ZMQ == 服务端创建,接受请求的过程
  9. vue 第二天(常用指令及插值语法)
  10. python linux开发_python之Linux开发环境安装