| 16 | Solution():rev_pair(0) {} |
| 17 | |
| 18 | void mergeSort(int l, int r) { |
| 19 | if (l + 1 >= r) return; // zero or one element |
| 20 | int m = (l + r) >> 1; // two element : m = l + 1 |
| 21 | mergeSort(l, m); |
| 22 | mergeSort(m, r); |
| 23 | int i = 0, j = 0; |
| 24 | while (j + m < r and i + l < m) { |
| 25 | if (n[i + l] > 2L * n[j + m]) { |
| 26 | rev_pair += m - l - i; |
| 27 | j ++ ; |
| 28 | } else { |
| 29 | i ++ ; |
| 30 | } |
| 31 | } |
| 32 | // merge |
| 33 | vector<int> buf; |
| 34 | buf.reserve(r - l); |
| 35 | for (i = j = 0; i + l < m and j + m < r;) { |
| 36 | if (n[i + l] > n[j + m]) buf.push_back(n[j++ + m]); |
| 37 | else buf.push_back(n[i++ + l]); |
| 38 | } |
| 39 | while (i + l < m) buf.push_back(n[i++ + l]); |
| 40 | while (j + m < r) buf.push_back(n[j++ + m]); |
| 41 | for (int i = 0; i < buf.size(); i++) |
| 42 | n[i + l] = buf[i]; |
| 43 | } |
| 44 | |
| 45 | int reversePairs(vector<int>& nums) { |
| 46 | if (nums.size() <= 1) return 0; |
nothing calls this directly
no outgoing calls
no test coverage detected