求最少逆序是多少,推荐用线段树,但暴力也能过,我用的方法两者皆非。我只是用暴力求第一种排列的逆序数,剩下的用小技巧推出。

 1 #include <iostream>
 2 using namespace std;
 3 int a[5010];
 4 int main()
 5 {
 6     int n,i,j,ans,min;
 7     while(cin>>n)
 8     {
 9         for(i = 0; i < n; i++)
10             cin>>a[i];
11         ans = 0;
12         for(i = 0; i < n-1; i++)
13             for(j = i+1; j < n; j++)
14                 if(a[j] < a[i])
15                     ans++;
16         min = ans;
17         for(i = 0; i < n-1; i++)
18         {
19             ans = ans+n-1-2*a[i];
20             if(ans < min) min = ans;
21         }
22         cout<<min<<endl;
23     }
24     return 0;
25 }