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