本题两种解法,暴搜,线段树,线段树只是处理最初序列,找出最初的逆序数,之后每次移动为当前逆序数+比移动数大的数-比移动数小的数。

做本题时完全没有想法,完全没有~copy胡浩大神代码,第一次抄错题...然后抄完发现无法理解,耗了很久,最后再discuss里找到一位暴搜和线段树都过了。先看暴搜了解了思路。又慢慢看懂了线段树。

说说线段树找最初序列逆序数的思路:

先先建一个2^x>n的二叉树,每个节点初始化区间长度(感觉可以省略,不过初始化以后看起来方便点),区间逆序数为0.每输入一个数,查找数组中比它大的数的部分,加上其区间逆序数,然后将此树所属所有区间值更新(即+1)。

附暴搜代码,和线段树代码

#include<stdio.h>//暴搜
#include<string.h>
int s[5005];
int main()
{int n,i,j,sum,f,t;while(scanf("%d",&n)!=EOF){memset(s,0,sizeof(s));sum=0;for(i=0;i<n;i++)scanf("%d",&s[i]);for(i=0;i<n;i++){t=0;for(j=i+1;j<n;j++){if(s[i]>s[j])t++;}sum=sum+t;}f=sum;for(i=0;i<n;i++){sum=sum+n-1-s[i]-s[i];if(f>sum)f=sum;}printf("%d\n",f);}return 0;
}
#include<stdio.h>//线段树
#include<string.h>
#include<stdlib.h>
#define N 5005<<2
int a[5005];
int sum;
struct Node
{int left;int right;int value;
};
struct Node node[N];
void build(int left,int right,int n)
{int mid;node[n].left=left;node[n].right=right;node[n].value=0;if(node[n].left==node[n].right)return;mid=(left+right)>>1;build(left,mid,n<<1);build(mid+1,right,n<<1|1);
}
void update(int index,int n)
{int mid;if(node[n].left==node[n].right){node[n].value=1;return ;}mid=(node[n].left+node[n].right)>>1;if(index<=mid)update(index,n<<1);else if(index>mid)update(index,n<<1|1);node[n].value+=1;
}
void query(int l,int r,int n)
{int mid;if(node[n].left==l&&node[n].right==r){sum+=node[n].value;return ;}mid=(node[n].left+node[n].right)>>1;if(r<=mid)query(l,r,n<<1);else if(l>mid)query(l,r,n<<1|1);else{query(l,mid,n<<1);query(mid+1,r,n<<1|1);}
}
int main()
{int n,i,min;while(scanf("%d",&n)!=EOF){build(0,n-1,1);sum=0;for(i=0; i<n; i++){scanf("%d",&a[i]);query(a[i],n-1,1);//先查询再更新,这样不包括自己,或者从比自己大一的数开始找update(a[i],1);}min=sum;for(i=0;i<n;i++){sum=sum+n-1-a[i]-a[i];if(sum<min)min=sum;}printf("%d\n",min);}return 0;
}




												

HUOJ 1394 Minimum Inversion Number相关推荐

  1. 逆序数2 HDOJ 1394 Minimum Inversion Number

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

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

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

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

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

  4. HDOJ1394 Minimum Inversion Number【线段树】

    需要注意的就是给出的数是0~n-1,而线段树根节点范围是1-n 所以main中insert要num[i]+1. 当然,根节点范围换成0~n-1就不需要了. Problem : 1394 ( Minim ...

  5. Minimum Inversion Number HDU - 1394(权值线段树/树状数组)

    The inversion number of a given number sequence a1, a2, -, an is the number of pairs (ai, aj) that s ...

  6. Minimum Inversion Number HDU - 1394(求一个数字环的逆序对+多种解法)

    题意: 给出n个数(0~n-1,每个数仅出现一次),问它长为n的循环序列中逆序对最少的数量. 多种解法:暴力+树状数组+分治+规律推导公式 题目: The inversion number of a ...

  7. [HDU1394]Minimum Inversion Number

    题目:Minimum Inversion Number 链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 分析: 1)先对序列求逆序对的数目,归并排序 ...

  8. Minimum Inversion Number 线段树

    The inversion number of a given number sequence a1, a2, -, an is the number of pairs (ai, aj) that s ...

  9. hdu1394 Minimum Inversion Number 线段树和树状数组

    题意: 输入一个长度 n 第二行给出长度为n的数组,数组的值刚好为0到n-1这n个数. 然后每次把数组的第一个数放到最后一个,放n-1次,共有n个排列,这n个排列就有n个逆序数,输出这n个逆序数的最小 ...

最新文章

  1. 常识性概念图谱建设以及在美团场景中的应用
  2. oracle dbms lob,如何使用DBMS_LOB从文件中加载CLOB数据
  3. [BZOJ 2243] 染色
  4. 数据表现层文件命名参考
  5. Highly Available (Mirrored) Queues
  6. Vue权限控制——动态注册路由
  7. 写代码万亿身家,V神曝光投资清单
  8. 2018百度之星程序设计大赛 - 资格赛 1002 子串查询
  9. BZOJ2976 : [Poi2002]出圈游戏
  10. [转]解决eclipse-helios中Errors running builder Java...
  11. 实践解决跨域问题的三种方式剖析
  12. 天天说大数据但不知怎么用?读完这篇你就懂了
  13. SMOTE算法(处理非平衡数据)
  14. Java的基本语法^_^
  15. java 像素点 生成图片_黑白图片的两种生成方法
  16. 电机学测试题+课后习题+思考题
  17. 二十四节气-寒露,月斜寒露白,此夕去留心
  18. 关于hadoop安装中nodemanager启动失败的原因
  19. 动态路由、OSPF多区域、ABR,ASBR
  20. 清除缓冲区的几种方法

热门文章

  1. 普通话证计算机证英语证,老师的必备证书:教师资格证、普通话证、英语四六级、计算机二级...
  2. 如何获取个人开发者微信小程序的APPId?
  3. 今日份PS练习|长春花蓝海报设计稿预览
  4. 与书的相逢,是一场美丽的遇见
  5. ipad上创建html5文件,为 iBooks Author 创建 HTML5 小组件
  6. 华三交换机配置access命令_H3C交换机基本配置命令明细一览
  7. Spring事务For循环中的代码单独为一个事务,循环一次提交一次事务
  8. Android添加phonegap--sencha touch2插件教程
  9. 网易云信:在医疗健康行业,做深“连接”价值
  10. 微信消息推送 有新发现 进来看