题意:

首先给你一个长度为n的序列v,你需要首先找出来逆序对(i<j && v[i]>v[j])

然后把这个序列的最后一个元素放在第一个位置上,其他元素都向后移动一位。

一直这样操作,会得到n个序列,问你这n个序列中,哪个序列中的逆序对数最少,并输出

题解:

首先我们可以通过线段树得到最初哪个序列的逆序对数,其实也可以通过归并排序得到,因为我是练习线段树,所以用的线段树写的

线段树求逆序对数的话,我们可以求出来v[i]可以和v[j]形成的逆序对数,这个j的取值范围为1<=j<i,我们可以维护一个最小值,然后得到有多少j能和v[i]构成逆序对

这一点不懂可以看一下代码

对于其他序列,你会发现就只是把最后一个元素放在第一个位置上,其他元素都向后移动一位。

那么原来上一个序列的逆序对数会减少n-v[n],因为对于v[n]元素,它是最后一个元素,那么肯定v[n]+1,v[n]+2...n都可以和v[n]构成逆序对

逆序对数会增加v[n]-1个,因为v[n]移动到第一个位置之后,那么1,2,3...v[n]-1都可以和v[n]构成一个逆序对数

代码:

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=2e5+10;
const int INF=0x3f3f3f3f;
#define ll long long
#define mem(a) memset(a,0,sizeof(a))
#define mem_(a) memset(a,-1,sizeof(a))
#define mem__(a) memset(a,INF,sizeof(a))
int lazy[maxn<<2],tree[maxn<<2],arr[maxn];
void push_up(int root)
{
tree[root]=min(tree[root<<1],tree[root<<1|1]);
}
void build(int root,int L,int R)
{
if(L==R)
{
tree[root]=arr[L];
return;
}
int mid=(L+R)>>1;
build(root<<1,L,mid);
build(root<<1|1,mid+1,R);
push_up(root);
}
void update(int root,int L,int R,int pos,int val)
{
if(L==R)
{
tree[root]=val;
return;
}
int mid=(L+R)>>1;
if(pos<=mid)
update(root<<1,L,mid,pos,val);
else update(root<<1|1,mid+1,R,pos,val);
push_up(root);
}
int query(int root,int L,int R,int LL,int RR,int val)
{
if(LL<=L && R<=RR)
{
if(tree[root]>val)
{
return R-L+1;
}
if(L==R) return 0;
}
int mid=(L+R)>>1,ans=0;
if(LL<=mid) ans+=query(root<<1,L,mid,LL,RR,val);
if(RR>mid) ans+=query(root<<1|1,mid+1,R,LL,RR,val);
return ans;
}
int main()
{
int n;
while(~scanf("%d",&n))
{
int sum=0;
mem__(tree);
//update(1,1,n,1,2);
//printf("%d**\n",query(1,1,n,1,1,1));
for(int i=1;i<=n;++i)
{
//int x;
scanf("%d",&arr[i]);
if(i!=1)
{
sum+=query(1,1,n,1,i-1,arr[i]);
}
update(1,1,n,i,arr[i]);
arr[i]+=1;
}
int minn=sum;
//printf("%d***\n",sum);
for(int i=n;i>1;--i)
{
sum=sum+((arr[i]-1)-(n-arr[i]));
minn=min(sum,minn);
}
printf("%d\n",minn);
}
return 0;
}

hdu 13394 Minimum Inversion Number 线段树的更多相关文章

  1. HDU.1394 Minimum Inversion Number (线段树 单点更新 区间求和 逆序对)

    HDU.1394 Minimum Inversion Number (线段树 单点更新 区间求和 逆序对) 题意分析 给出n个数的序列,a1,a2,a3--an,ai∈[0,n-1],求环序列中逆序对 ...

  2. [HDU] 1394 Minimum Inversion Number [线段树求逆序数]

    Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java ...

  3. hdu - 1394 Minimum Inversion Number(线段树水题)

    http://acm.hdu.edu.cn/showproblem.php?pid=1394 很基础的线段树. 先查询在更新,如果后面的数比前面的数小肯定会查询到前面已经更新过的值,这时候返回的sum ...

  4. HDU 1394 Minimum Inversion Number(线段树 或 树状数组)

    题目大意:给出从 0 到 n-1 的整数序列,A0,A1,A2...An-1.可将该序列的前m( 0 <= m < n )个数移到后面去,组成其他的序列,例如当 m=2 时,得到序列 A2 ...

  5. HDU 1394 Minimum Inversion Number 线段树

    题目: http://acm.hdu.edu.cn/showproblem.php?pid=1394 没看到多组输入,WA了一万次...... 其实很简单,有人暴力过得,我感觉归并排序.二叉排序树求逆 ...

  6. HDU-1394 Minimum Inversion Number 线段树+逆序对

    仍旧在练习线段树中..这道题一开始没有完全理解搞了一上午,感到了自己的shabi.. Minimum Inversion Number Time Limit: 2000/1000 MS (Java/O ...

  7. hdu1394(Minimum Inversion Number)线段树

    明知道是线段树,却写不出来,搞了半天,戳,没办法,最后还是得去看题解(有待于提高啊啊),想做道题还是难啊. 还是先贴题吧 HDU-1394 Minimum Inversion Number Time ...

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

    题目链接 Problem Description The inversion number of a given number sequence a1, a2, ..., an is the numb ...

  9. hdu 1394 Minimum Inversion Number (树状数组求逆序对)

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

随机推荐

  1. 【MyBatis】MyBatis 注解开发

    MyBatis 注解开发 文章源码 环境搭建 Mybatis 也可以使用注解开发方式,这样就可以减少编写 Mapper 映射文件. 常用注解说明: @Insert 实现新增 @Update 实现更新 ...

  2. 【剑指 Offer】04.二维数组中的查找

    题目描述 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...

  3. 深入剖析setState同步异步机制

    关于 setState setState 的更新是同步还是异步,一直是人们津津乐道的话题.不过,实际上如果我们需要用到更新后的状态值,并不需要强依赖其同步/异步更新机制.在类组件中,我们可以通过thi ...

  4. Mybatis的CRUD 增删改查

    目录 namespace 命名空间 select insert update delete Mybatis 官网: https://mybatis.org/mybatis-3/zh/getting-s ...

  5. 记汉化zabbix后图形界面没有任何汉字的问题

    1.安装并汉化后zabbix,所有的图形界面都没有任何字图,如下图 2.郁闷不已,去/var/www/html/zabbix/fonts目录下面查看,发现之前上传字体的文件名后缀是.ttc,猜着一般见 ...

  6. ctfhub技能树—信息泄露—目录遍历

    打开靶机 查看页面 点击后发现几个目录 于是开始查找 在2/1目录下发现flag.txt 成功拿到flag 练习一下最近学习的requests库 附上源码 #! /usr/bin/env python ...

  7. 2021年【线上】第一性原理vasp技术实战培训班

    材料模拟分子动力学课程 3月19号--22号 远程在线课 lammps分子动力学课程 3月12号--15号 远程在线课 第一性原理VASP实战课 3月25号-28号 远程在线课 量子化学Gaussia ...

  8. JVM(四)打破双亲委派和SPI机制

    前言: 我们都知道判断两个类是不是同一个,要根据类加载器和全限定名.这是为什么呢?为什么不同的类加载器加载同一个类是不同的呢? 答案就是,不同的类加载器所加载的类在方法区的存储空间是不同的即Insta ...

  9. 一文说通Dotnet的委托

    简单的概念,也需要经常看看.   一.前言 先简单说说Delegate的由来.最早在C/C++中,有一个概念叫函数指针.其实就是一个内存指针,指向一个函数.调用函数时,只要调用函数指针就可以了,至于函 ...

  10. Python+Selenium+Unittest实现PO模式web自动化框架(3)

    1.Outputs目录下的具体目录功能 2.logs目录 logs目录是用于存放log日志的一个目录. 2.reports目录 reports目录是用于存放测试报告的. 3.screenshots目录 ...