题目链接: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. java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()L

    mybatis与springboot集成的时候,报错:java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManag ...

  2. Json中相同或者重复记录的值相加组成新的Json

    var data = [ {"Networking": "WiFi", "count_value": "2000"}, ...

  3. int和Integer区别

    Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper cl ...

  4. 编写jQuery插件(三)——三个插件例子

    封装jQuery对象方法的插件 表格隔行变色插件 CSS部分: .even{ background:#CCC; } .odd{ background:#666; } .selected{ backgr ...

  5. TEXT 15 A text a day...

    TEXT 15 A text a day... Mar 24th 2006 From The Economist print edition The medical uses of mobile ph ...

  6. LayeruI Loadding Custom word

    var getTableResult = function (pageIndex, pageSize) { var index = layer.load(2, { content: '加载中..... ...

  7. pipeenv error

    [root@mhc tmp]# pipenv --python 3.6Creating a virtualenv for this project…Using /root/python3/bin/py ...

  8. Zookeeper 注册中心

    一.Zookeeper的介绍 Zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用 ...

  9. SqlServer 查询死锁,杀死死锁进程*转载

    原文: -- 查询死锁 select request_session_id spid, OBJECT_NAME(resource_associated_entity_id) tableName fro ...

  10. 批量MD5命名文件

    #coding=utf-8 import os import hashlib def GetFileMd5(filename): if not os.path.isfile(filename): pr ...