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

思路:建立一个空线段树,求出逆序数,(逆序数性质:交换两个相邻数,逆序数+1或-1, 交换两个不相邻数a, b, 逆序数+=两者间大于a的个数-两者间小于a的个数)

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxn = ;
int a[maxn*],n,b[maxn*];
void build(int k,int l,int r)
{
b[k]=;
if(l==r) return ;
int mid=(l+r)/;
build(k*,l,mid);
build(k*+,mid+,r);
}
void update(int k,int l,int r,int x,int pos)
{
if(l==r)
{
b[k]+=x;
return ;
}
int mid=(l+r)/;
if(pos<=mid) update(k*,l,mid,x,pos);
else update(k*+,mid+,r,x,pos);
b[k]=b[k*]+b[k*+];
}
int query(int k,int l,int r,int x,int y)
{
if(x<=l&&y>=r) return b[k];
int mid=(l+r)/;
if(y<=mid) return query(k*,l,mid,x,y);
if(x>mid) return query(k*+,mid+,r,x,y);
return query(k*,l,mid,x,y)+query(k*+,mid+,r,x,y);
}
int main(void)
{
int i,sum,tmp;
while(~scanf("%d",&n))
{
build(,,n);
sum=;
for(i=;i<=n;i++)
{
scanf("%d",&a[i]);
sum+=query(,,n,a[i]+,n);
update(,,n,,a[i]+);
}
tmp=sum;
for(i=;i<=n;i++)
{
sum+=(n--a[i]-a[i]);
if(tmp>sum)
tmp=sum;
}
printf("%d\n",tmp);
}
return ;
}

hdu-1394(线段树)的更多相关文章

  1. hdu 1394(线段树) 最小逆序数

    http://acm.hdu.edu.cn/showproblem.php?pid=1394 给出一列数组,数组里的数都是从0到n-1的,在依次把第一个数放到最后一位的过程中求最小的逆序数 线段树的应 ...

  2. hdu 1394 线段树

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

  3. hdu 1394 (线段树求逆序数)

    <题目链接> 题意描述: 给你一个有0--n-1数字组成的序列,然后进行这样的操作,每次将最前面一个元素放到最后面去会得到一个序列,那么这样就形成了n个序列,那么每个序列都有一个逆序数,找 ...

  4. HDU 1394 线段树求逆序对

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

  5. HDU 1394 线段树or 树状数组~

    Minimum Inversion Number Description The inversion number of a given number sequence a1, a2, ..., an ...

  6. hdu 1394 线段树计算逆序数

    线段树计算逆序数的原理: 用线段树来统计已插入的数的个数(所以要保证最大的那个数不能太大,否则数组都开不了),然后每插入一个数,就查询比插入的数大的个数,累加即可. 这个题还有一个特点就是,题目给的是 ...

  7. hdu 5877 线段树(2016 ACM/ICPC Asia Regional Dalian Online)

    Weak Pair Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  8. hdu 3974 线段树 将树弄到区间上

    Assign the task Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  9. hdu 3436 线段树 一顿操作

    Queue-jumpers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  10. hdu 3397 线段树双标记

    Sequence operation Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

随机推荐

  1. django 使用多个数据库

    在django项目中, 一个工程中存在多个APP应用很常见. 有时候希望不同的APP连接不同的数据库,这个时候需要建立多个数据库连接. 参考:http://blog.csdn.net/songfree ...

  2. Tocmat 启动错误 Port 8005 required by tomcat v7.0 server at localhost is already in use

    1: netstat -ano!findstr 8005 2: taskkill /pid 6476 /f

  3. ArrayList 原理(2)

    1. 概述 关于Java集合的小抄中是这样描述的: 以数组实现.节约空间,但数组有容量限制.超出限制时会增加50%容量,用System.arraycopy()复制到新的数组,因此最好能给出数组大小的预 ...

  4. 解决Linux命令行为什么变成-bash-3.2$

    在Linux服务器上创建了一个新用户probe,是这样创建的: [root@localhost home]# groupadd -g 501 probe [root@localhost home]# ...

  5. Haskell语言学习笔记(59)Bitraversable

    Bitraversable class (Bifunctor t, Bifoldable t) => Bitraversable t where bitraverse :: Applicativ ...

  6. Haskell语言学习笔记(40)Arrow(1)

    Arrow class Category a => Arrow a where arr :: (b -> c) -> a b c first :: a b c -> a (b, ...

  7. cookie保存用户名及密码

    登陆页中,用户输入用户名密码,点击提交,后台对照mysq数据库中,看是否有对应的用户名,以及密码是否正确.如果正确 则将用户名密码分两份Cookie保存.页面跳转到登陆成功页. 用户再次访问登陆页时, ...

  8. oracle 网络环境配置

    PLSQL Developer连接Oracle11g 64位数据库配置详解 最近换了台64bit的电脑,所以oracle数据库也跟着换成了64bit的,不过 问题也随之产生,由于plsql devel ...

  9. Null Hypothesis and Alternate Hypothesis

    1.Null Hypothesis Overview 零假设,H0是普遍接受的事实;这与备择假设(alternate hypothesis)正好相反.研究人员努力否定.驳斥零假设.研究人员提出了另一种 ...

  10. Retrofit2.0+RxJava2.0问题

    问题1:java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 2 path ...