Advertisement
HjHimansh

Untitled

Oct 18th, 2023
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.01 KB | None | 0 0
  1. #include <cmath>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <iostream>
  5. #include <algorithm>
  6. using namespace std;
  7.  
  8.  
  9. int main() {
  10.  
  11. int t;
  12. cin >> t;
  13.  
  14. while(t--) {
  15. int n;
  16. cin >> n;
  17.  
  18. vector<int> nums;
  19.  
  20. int temp;
  21.  
  22. int answer = 0;
  23. while(n--) {
  24. cin >> temp;
  25. nums.push_back(temp);
  26. }
  27.  
  28. n = nums.size();
  29.  
  30. for(int i=n-1; i>=0; i--) {
  31. int curr = nums[i];
  32.  
  33. /*
  34. loop invariant: Array[i+1...n-1] is sorted. (in descending order)
  35.  
  36. */
  37. 1
  38. [m, 7, 4, 3 ,2]
  39. i k
  40. 0 1 1 0
  41.  
  42.  
  43. // binary search.. find least mid such that nums[mid] < curr..
  44. int low = i+1, high = n-1, mid;
  45.  
  46. int possiblePivot = -1;
  47. while(low <= high) {
  48. mid = low + (high-low)/2;
  49. if(nums[mid] < curr) {
  50. possiblePivot = mid;
  51. high = mid - 1;
  52. }
  53. else if (nums[mid] >= curr) {
  54. low = mid + 1;
  55. }
  56. }
  57.  
  58. //cout << "PossiblePivot = " << possiblePivot << endl;
  59. if(possiblePivot != -1) {
  60. answer += n-possiblePivot;
  61. }
  62.  
  63.  
  64.  
  65. int k = i;
  66. // inserting arr[i] at appropriate place in nums[i+1...n]
  67. while(k+1 < n && nums[k] < nums[k+1]) {
  68. swap(nums[k], nums[k+1]);
  69. k++;
  70. }
  71. // cout << "i = " << i << endl;
  72. // for(k=i; k<n; k++) {
  73. // cout << nums[k] << " ";
  74. // }
  75. // cout << endl;
  76. }
  77.  
  78.  
  79. cout << answer << endl;
  80.  
  81. }
  82.  
  83.  
  84. return 0;
  85. }
  86.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement