fork(1) download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. // Speed
  5. #define fast_io ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
  6.  
  7. // Typedefs
  8. #define int long long
  9. #define pb push_back
  10. #define ff first
  11. #define ss second
  12. #define all(x) (x).begin(), (x).end()
  13. #define rall(x) (x).rbegin(), (x).rend()
  14. #define sz(x) ((int)(x).size())
  15. #define endl '\n'
  16. #define yes cout << "yes\n"
  17. #define no cout << "no\n"
  18.  
  19. // Loops
  20. #define rep(i,a,b) for(int i=a;i<b;++i)
  21. #define per(i,a,b) for(int i=b-1;i>=a;--i)
  22. #define each(x, a) for (auto& x : a)
  23.  
  24. // Consts
  25. const int INF = 1e18;
  26. const int MOD = 1e9+7;
  27. const int N = 2e5 + 5;
  28.  
  29. // Math
  30. int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
  31. int lcm(int a, int b) { return (a / gcd(a, b)) * b; }
  32.  
  33. int power(int a, int b, int m = MOD) {
  34. int res = 1;
  35. while (b > 0) {
  36. if (b & 1) res = res * a % m;
  37. a = a * a % m;
  38. b >>= 1;
  39. }
  40. return res;
  41. }
  42.  
  43. int modinv(int a, int m = MOD) {
  44. return power(a, m - 2, m);
  45. }
  46.  
  47. int count_inversions(vector<int> a) {
  48. int inv = 0;
  49. int n = a.size();
  50. vector<int> temp(n);
  51. function<void(int, int)> merge_sort = [&](int l, int r) {
  52. if (r - l <= 1) return;
  53. int m = (l + r) / 2;
  54. merge_sort(l, m);
  55. merge_sort(m, r);
  56. int i = l, j = m, k = l;
  57. while (i < m && j < r) {
  58. if (a[i] <= a[j]) temp[k++] = a[i++];
  59. else {
  60. inv += m - i;
  61. temp[k++] = a[j++];
  62. }
  63. }
  64. while (i < m) temp[k++] = a[i++];
  65. while (j < r) temp[k++] = a[j++];
  66. rep(i, l, r) a[i] = temp[i];
  67. };
  68. merge_sort(0, n);
  69. return inv;
  70. }
  71.  
  72. // Logic
  73. void solve() {
  74. // Code
  75. int n;
  76. cin >> n;
  77. vector<int> p(n);
  78. rep(i, 0, n) cin >> p[i];
  79.  
  80. int minInv = INF;
  81. vector<int> a(n);
  82.  
  83. for (int mask = 0; mask < (1 << n); ++mask) {
  84. rep(i, 0, n) {
  85. if ((mask >> i) & 1)
  86. a[i] = 2 * n - p[i];
  87. else
  88. a[i] = p[i];
  89. }
  90. minInv = min(minInv, count_inversions(a));
  91. }
  92.  
  93. cout << minInv << endl;
  94. }
  95.  
  96. // Main
  97. int32_t main() {
  98. fast_io;
  99.  
  100. int t;
  101. cin >> t;
  102. while (t--) {
  103. solve();
  104. }
  105.  
  106. return 0;
  107. }
Success #stdin #stdout 0s 5316KB
stdin
5
2
2 1
3
2 1 3
4
4 3 2 1
5
2 3 1 5 4
6
2 3 4 1 5 6
stdout
0
1
0
2
2