• hdu 1394 Minimum Inversion Number


    http://acm.hdu.edu.cn/showproblem.php?pid=1394

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 #define maxn 50000
     5 using namespace std;
     6 
     7 struct node
     8 {
     9     int l,r;
    10     int ans;
    11 }tree[maxn*4];
    12 
    13 void build(int i,int l,int r)
    14 {
    15     tree[i].l=l;tree[i].r=r;
    16     tree[i].ans=0;
    17     if(l==r) return ;
    18     int mid=(l+r)>>1;
    19     build(i<<1,l,mid);
    20     build(i<<1|1,mid+1,r);
    21 }
    22 
    23 int search1(int i,int l,int r)
    24 {
    25     if(tree[i].l==l&&tree[i].r==r)
    26     {
    27         return tree[i].ans;
    28     }
    29     int mid=(tree[i].l+tree[i].r)>>1;
    30     if(r<=mid)
    31     {
    32         return search1(i<<1,l,r);
    33     }
    34     else if(l>mid)
    35     {
    36         return search1(i<<1|1,l,r);
    37     }
    38     else
    39     {
    40         return search1(i<<1,l,mid)+search1(i<<1|1,mid+1,r);
    41     }
    42 }
    43 
    44 void update(int i,int c)
    45 {
    46     tree[i].ans++;
    47     if(tree[i].l==tree[i].r) return ;
    48     int mid=(tree[i].l+tree[i].r)>>1;
    49     if(c<=mid)
    50     {
    51         update(i<<1,c);
    52     }
    53     else
    54     {
    55         update(i<<1|1,c);
    56     }
    57 }
    58 
    59 int main()
    60 {
    61     int a[maxn],n;
    62     while(scanf("%d",&n)!=EOF)
    63     {
    64         build(1,0,n-1);
    65         int sum=0;
    66         for(int i=1; i<=n; i++)
    67         {
    68             scanf("%d",&a[i]);
    69             sum+=search1(1,a[i],n-1);
    70             update(1,a[i]);
    71         }
    72         int cc=sum;
    73         for(int i=1; i<=n; i++)
    74         {
    75             sum+=(-a[i]+n-a[i]-1);
    76             cc=min(cc,sum);
    77         }
    78         printf("%d
    ",cc);
    79     }
    80     return 0;
    81 }
    View Code
  • 相关阅读:
    【C++】关于new分配空间
    【嵌入式】keil不识别野火高速dap的问题
    【Java】质数判断
    【学习方法】大学背知识点方法
    【算法】浮点数多次运算精确值下降
    【算法】main函数的堆栈溢出
    【算法】三值选中法
    【CC++笔记】register寄存器关键字
    JSON.parse()和JSON.stringify()
    webStorm使用和安装
  • 原文地址:https://www.cnblogs.com/fanminghui/p/3579193.html
Copyright © 2020-2023  润新知