Minimum Inversion Number

 Minimum Inversion Number
Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u
Submit Status

Description

The inversion number of a given number sequence a1, a2, ..., an is the number of pairs (ai, aj) that satisfy i < j and ai > aj. 

For a given sequence of numbers a1, a2, ..., an, if we move the first m >= 0 numbers to the end of the seqence, we will obtain another sequence. There are totally n such sequences as the following: 

a1, a2, ..., an-1, an (where m = 0 - the initial seqence) 
a2, a3, ..., an, a1 (where m = 1) 
a3, a4, ..., an, a1, a2 (where m = 2) 
... 
an, a1, a2, ..., an-1 (where m = n-1) 

You are asked to write a program to find the minimum inversion number out of the above sequences. 
 

Input

The input consists of a number of test cases. Each case consists of two lines: the first line contains a positive integer n (n <= 5000); the next line contains a permutation of the n integers from 0 to n-1. 
 

Output

For each case, output the minimum inversion number on a single line. 
 

Sample Input

10 1 3 6 9 0 8 5 7 4 2
 

Sample Output

16
/*
题意:给你一个序列,让你求最小逆序对

初步思路:按照题目的要求进行n次旋转,然后每次用树状数组求出最小逆序对

#超时:果然暴力是不行的
*/
#include <bits/stdc++.h>
using namespace std;
#define N 5005
#define lowbit(x) x&(-x)
#define INF 0x3f3f3f3f
int a[N*2];
int n;
int c[N];
int minn;
int res=INF;
void add(int x){
    while(x<N){
        c[x]++;
        x+=lowbit(x);
    }
}
int sum(int x){
    int res=0;
    while(x>0){
        res+=c[x];
        x-=lowbit(x);
    }
    return res;
}
void init(){
    memset(c,0,sizeof c);
    minn=0;
    res=0;
}
int main(){
    // freopen("in.txt","r",stdin);
    while(scanf("%d",&n)!=EOF){
        init();
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
            a[i]++;
            minn+=sum(n)-sum(a[i]);
            add(a[i]);
        }
        res=minn;
        for(int i=1;i<=n;i++){
            res+=n-a[i]-(a[i]-1);
            // cout<<res<<endl;
            minn=min(res,minn);
        }
        printf("%d\n",minn);
    }
    return 0;
}

 

posted @ 2017-03-24 14:38  勿忘初心0924  阅读(245)  评论(0编辑  收藏  举报