</pre></h1><p><span style="font-family:'Times New Roman'"><strong><span style="font-size:12px; font-family:Arial; color:green"> </span><span style="font-family:Arial; color:green"><span style="font-size:18px"> Minimum Inversion Number</span></span></strong></span></p><p><span style="font-family:'Times New Roman'; font-size:14px"><strong><span style="font-family:Arial; font-size:12px; color:green">Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)</span></strong></span></p><span style="font-family:'Times New Roman'; font-size:14px"><strong><span style="font-family:Arial; font-size:12px; color:green">Total Submission(s): 18380 Accepted Submission(s): 11159</span></strong></span><br style="font-family:'Times New Roman'; font-size:14px" /><br style="font-family:'Times New Roman'; font-size:14px" /><div class="panel_title" align="left" style="height:38px; padding:0px 14px; color:rgb(124,169,237); font-size:18px; font-family:Arial; font-weight:bold">Problem Description</div><div class="panel_content" style="height:auto; margin:0px; padding:0px 20px; font-size:14px; font-family:'Times New Roman'">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.</div><div class="panel_bottom" style="height:auto; margin:0px; font-family:'Times New Roman'; font-size:14px"> </div><br style="font-family:'Times New Roman'; font-size:14px" /><div class="panel_title" align="left" style="height:38px; padding:0px 14px; color:rgb(124,169,237); font-size:18px; font-family:Arial; font-weight:bold">Input</div><div class="panel_content" style="height:auto; margin:0px; padding:0px 20px; font-size:14px; font-family:'Times New Roman'">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.</div><div class="panel_bottom" style="height:auto; margin:0px; font-family:'Times New Roman'; font-size:14px"> </div><br style="font-family:'Times New Roman'; font-size:14px" /><div class="panel_title" align="left" style="height:38px; padding:0px 14px; color:rgb(124,169,237); font-size:18px; font-family:Arial; font-weight:bold">Output</div><div class="panel_content" style="height:auto; margin:0px; padding:0px 20px; font-size:14px; font-family:'Times New Roman'">For each case, output the minimum inversion number on a single line.</div><div class="panel_bottom" style="height:auto; margin:0px; font-family:'Times New Roman'; font-size:14px"> </div><br style="font-family:'Times New Roman'; font-size:14px" /><div class="panel_title" align="left" style="height:38px; padding:0px 14px; color:rgb(124,169,237); font-size:18px; font-family:Arial; font-weight:bold">Sample Input</div><div class="panel_content" style="height:auto; margin:0px; padding:0px 20px; font-size:14px; font-family:'Times New Roman'"><pre style="word-wrap:break-word; white-space:pre-wrap; margin-top:0px; margin-bottom:0px"><div style="font-family:'Courier New',Courier,monospace">10
1 3 6 9 0 8 5 7 4 2</div>
Sample Output
16
Author
CHEN, Gaoli
Source
</pre></h1><p><span style="font-family:'Times New Roman'"><strong><span style="font-size:12px; font-family:Arial; color:green"> </span><span style="font-family:Arial; color:green"><span style="font-size:18px"> Minimum Inversion Number</span></span></strong></span></p><p><span style="font-family:'Times New Roman'; font-size:14px"><strong><span style="font-family:Arial; font-size:12px; color:green">Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)</span></strong></span></p><span style="font-family:'Times New Roman'; font-size:14px"><strong><span style="font-family:Arial; font-size:12px; color:green">Total Submission(s): 18380 Accepted Submission(s): 11159</span></strong></span><br style="font-family:'Times New Roman'; font-size:14px" /><br style="font-family:'Times New Roman'; font-size:14px" /><div class="panel_title" align="left" style="height:38px; padding:0px 14px; color:rgb(124,169,237); font-size:18px; font-family:Arial; font-weight:bold">Problem Description</div><div class="panel_content" style="height:auto; margin:0px; padding:0px 20px; font-size:14px; font-family:'Times New Roman'">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.</div><div class="panel_bottom" style="height:auto; margin:0px; font-family:'Times New Roman'; font-size:14px"> </div><br style="font-family:'Times New Roman'; font-size:14px" /><div class="panel_title" align="left" style="height:38px; padding:0px 14px; color:rgb(124,169,237); font-size:18px; font-family:Arial; font-weight:bold">Input</div><div class="panel_content" style="height:auto; margin:0px; padding:0px 20px; font-size:14px; font-family:'Times New Roman'">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.</div><div class="panel_bottom" style="height:auto; margin:0px; font-family:'Times New Roman'; font-size:14px"> </div><br style="font-family:'Times New Roman'; font-size:14px" /><div class="panel_title" align="left" style="height:38px; padding:0px 14px; color:rgb(124,169,237); font-size:18px; font-family:Arial; font-weight:bold">Output</div><div class="panel_content" style="height:auto; margin:0px; padding:0px 20px; font-size:14px; font-family:'Times New Roman'">For each case, output the minimum inversion number on a single line.</div><div class="panel_bottom" style="height:auto; margin:0px; font-family:'Times New Roman'; font-size:14px"> </div><br style="font-family:'Times New Roman'; font-size:14px" /><div class="panel_title" align="left" style="height:38px; padding:0px 14px; color:rgb(124,169,237); font-size:18px; font-family:Arial; font-weight:bold">Sample Input</div><div class="panel_content" style="height:auto; margin:0px; padding:0px 20px; font-size:14px; font-family:'Times New Roman'"><pre style="word-wrap:break-word; white-space:pre-wrap; margin-top:0px; margin-bottom:0px"><div style="font-family:'Courier New',Courier,monospace">10
1 3 6 9 0 8 5 7 4 2</div>
16
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 5005;
int a[N], bit[N];
int lowbit(int k)
{
return k&-k;
}
void add(int x)
{
while(x<N)
{
bit[x]+=1;
x+=lowbit(x);
}
return ;
}
int sum(int x)
{
int ans=0;
while(x)
{
ans+=bit[x];
x-=lowbit(x);
}
return ans;
}
int main()
{
int n;
while(scanf("%d", &n)!=EOF)
{
memset(bit,0,sizeof(bit));
int tmp=0;
for(int i=1;i<=n;i++)
{
scanf("%d", &a[i]);
a[i]++;
add(a[i]);
tmp+=(i-sum(a[i]));
}
int ans=tmp;
for(int i=1;i<=n;i++)
{
tmp=tmp+(n-a[i])-(a[i]-1);
ans=min(ans,tmp);
}
printf("%d\n",ans);
}
return 0;
}