hdu1349(题解) Minimum Inversion Number

原创 2016年05月30日 23:26:11

先用线段树求出最初的逆序数(O(nlogn)),然后推其他(O(n))
设a1,a2,……an的逆序数为sum,an的逆序数为invn,则an,a1,……an-1的逆序数=sum-invn+比an小的数,而由于输入的数是0,1,……,n-1
所以比an小的数==an,而且invn=n-1-an;所以an,a1,……an-1的逆序数=sum+2*an-n+1,下面代码是反过来,道理是一样的

#include <stdio.h>
#include <string.h>
#define Minn(X,Y) (((X)<(Y))?(X):(Y))
int tree[5050<<2],sum,n,xx[5005];
void buildt(int tn,int l,int r,int x)
{
    int mid;
    if(l==r) {tree[tn]=1;return;    }//tree[tn]=1是因为n个数都不相等
    mid=((r-l)>>1)+l;
    if(x<=mid) {sum+=tree[tn<<1|1];buildt(tn<<1,l,mid,x);}
    else buildt(tn<<1|1,mid+1,r,x);
    tree[tn]=tree[tn<<1]+tree[tn<<1|1];
}
int main(int argc, char const *argv[])
{
    int i,res;
    while(scanf("%d",&n)!=EOF)
    {
        memset(tree,0,sizeof(tree));
        sum=0;
        for(i=0;i<n;i++){
        scanf("%d",xx+i);
        buildt(1,0,n-1,xx[i]);
        }
        res=sum;
        for(i=0;i<n-1;i++){
            sum+=n-1-2*xx[i];
                res=Minn(res,sum);
            }
        printf("%d\n",res );
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

HDU1349 Minimum Inversion Number

B - Minimum Inversion Number Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d &...
  • Jelly_acm
  • Jelly_acm
  • 2016年09月15日 13:04
  • 316

hdu 1394 Minimum Inversion Number 树状数组求逆序数对(原理)

好吧,这是作为ACM弱渣的我第一次写博客,值得纪念!!!在acm集训时接触树状数组不久,只能说对它神奇的位运算惊叹不已,但是实际运用到题目,只能惊叹好难运用,做不出来。那么对于hdu1394这题关于求...
  • wyt734933289
  • wyt734933289
  • 2015年05月21日 15:18
  • 644

Minimum Inversion Number (单点更新 线段树 )

Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java...
  • SDUTyangkun
  • SDUTyangkun
  • 2017年02月03日 11:44
  • 102

【LeetCode-面试算法经典-Java实现】【111-Minimum Depth of Binary Tree(二叉树的最小深度)】

【111-Minimum Depth of Binary Tree(二叉树的最小深度)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given a binary tre...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月11日 07:37
  • 2698

poi导出后台提示报错,Minimum column number is 0!

参考: http://ask.csdn.net/questions/217353解决方案: 实体类里没加注解。在需要打印出来的实体类的get方法加上注解@ExcelField如一张用户表:/** ...
  • lovelovelovelovelo
  • lovelovelovelovelo
  • 2017年08月03日 09:40
  • 218

Minimum Inversion Number(线段树求逆序数小总结)

首先,求逆序数对的思路: 1.得到整个数列后,从前往后扫,统计比a[i]小的,在a[i]后面的有多少个 这样做的话,应该是只有n2的暴力作法,没想到更好的方法 2.统计a[i]前面的...
  • lehehehaha
  • lehehehaha
  • 2013年10月27日 16:39
  • 343

HDU 1394 Minimum Inversion Number(线段树求逆序对数目)

HDU 1394题意: 给一个由0~n-1组成的序列,求出该序列的所有循环同构序列中的最小逆序对数目,逆序对的两个元素可以不相邻。 思路:这题据说可以直接暴力O(n2)O(n^2)可以水过。。 ...
  • qq_15714857
  • qq_15714857
  • 2015年08月18日 01:40
  • 715

Minimum Inversion Number(逆序数)(技巧or树状数组or线段树)

Problem Description The inversion number of a given number sequence a1, a2, ..., an is the number of...
  • galesaur_wcy
  • galesaur_wcy
  • 2017年08月09日 19:56
  • 51

HDU 1394 Minimum Inversion Number [线段树->单点更新]【数据结构】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394————————————————–.Minimum Inversion Number Time ...
  • qq_33184171
  • qq_33184171
  • 2016年11月13日 16:27
  • 141

【线段树求逆序数】【HDU1394】Minimum Inversion Number

题目大意: 随机给你全排列中的一个,但不断的把第一个数丢到最后去,重复N次,形成了N个排列,问你这N个排列中逆序数最小为多少 做法: 逆序数裸的是N^2 利用线段树可以降到NlogN ...
  • zy691357966
  • zy691357966
  • 2015年04月08日 10:16
  • 354
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hdu1349(题解) Minimum Inversion Number
举报原因:
原因补充:

(最多只允许输入30个字)