Advertisement
maycod23

Untitled

Jun 22nd, 2023
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.98 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. string addtwobigintegers(string &a, string &b) {
  5. string ans;
  6. int i = a.length() - 1, j = b.length() - 1, carry = 0;
  7. while (i >= 0 && j >= 0) {
  8. int sum = (a[i] - 48 + b[j] - 48 + carry);
  9. int tempadd = (sum % 10); //8
  10. carry = (sum / 10);//9
  11. ans.push_back(tempadd + 48);
  12. i--; j--;
  13. }
  14. while (i >= 0) {
  15. int sum = (a[i] - 48 + carry);
  16. int tempadd = (sum % 10);
  17. carry = (sum / 10);
  18. ans.push_back(tempadd + 48);
  19. i--;
  20. }
  21. while (j >= 0) {
  22. int sum = b[j] - 48 + carry;
  23. int tempadd = (sum % 10);
  24. carry = (sum / 10);
  25. ans.push_back(tempadd + 48);
  26. j--;
  27. }
  28.  
  29. if (carry != 0) ans.push_back(carry + 48);
  30.  
  31. reverse(ans.begin(), ans.end());
  32.  
  33. // for (auto &i : ans )cout << i; cout << endl;
  34. //how to add two big integers
  35. //two pointers
  36. //comparison
  37. //exhausting i or j
  38. //carry forwarding
  39. return ans;
  40. }
  41.  
  42. int minsubsequences(vector<int>& v, int n, int k) {
  43. sort(v.begin(), v.end());
  44. int count = 1, m = v[0];
  45. for (int i = 0; i < n; i++) {
  46. //curr i will act as M
  47. if ((v[i] - m) <= k) continue;
  48. else {
  49. count++;
  50. m = v[i];
  51. }
  52. }
  53. return count;
  54. }
  55.  
  56. void merge(vector<int>&v, int start, int mid, int end, int &rpcount) {
  57. int i = start, j = mid + 1, k;
  58. while (i <= mid && j <= end) {
  59. if (v[i] > (2 * v[j])) {
  60. rpcount += (mid - i + 1);
  61. j++;
  62. }
  63. else i++;
  64. }
  65.  
  66. i = start, j = mid + 1, k = 0;
  67. int temp[end - start + 1];
  68. while (i <= mid && j <= end) {
  69. if (v[i] < v[j]) {
  70. temp[k] = v[i];
  71. i++; k++;
  72. }
  73. else {
  74. temp[k] = v[j];
  75. j++; k++;
  76. }
  77. }
  78. while (i <= mid) {
  79. temp[k] = v[i];
  80. i++; k++;
  81. }
  82. while (j <= end) {
  83. temp[k] = v[j];
  84. j++; k++;
  85. }
  86. for (int i = start; i <= end; i++) {
  87. v[i] = temp[i - start];
  88. }
  89. }
  90.  
  91. void dividenconquer(vector<int>&v, int start, int end, int &rpcount) {
  92. if (start < end) {
  93. int mid = (start + (end - start) / 2);
  94. dividenconquer(v, start, mid, rpcount);
  95. dividenconquer(v, mid + 1, end, rpcount);
  96. merge(v, start, mid, end, rpcount);
  97. }
  98. }
  99. int main() {
  100. //43 : 11 + 11 + 11 +10
  101. //564 :
  102. //99 :
  103. //909 :9
  104.  
  105. // //adding two big integers
  106.  
  107. // int n, k; cin >> n >> k;
  108. // vector<int> v(n);
  109. // for (auto&i : v) cin >> i;
  110. // int ans = minsubsequences(v, n, k);
  111. // cout << ans << endl;
  112.  
  113. // int n, addrocks; cin >> n >> addrocks;
  114. // vector<int> capacity(n), rocks(n);
  115. // for (auto &i : capacity) cin >> i;
  116. // for (auto &i : rocks) cin >> i;
  117. // vector<int> needed(n);
  118. // for (int i = 0; i < n; i++) needed[i] = (capacity[i] - rocks[i]);
  119.  
  120.  
  121. // sort(needed.begin(), needed.end());
  122. // int tempsum = 0, ans = 0;
  123. // for (int i = 0; i < n; i++) {
  124. // tempsum += needed[i];
  125. // if (tempsum <= addrocks) {
  126. // ans = (i + 1);
  127. // }
  128. // else {
  129. // break;
  130. // }
  131. // }
  132. // cout << ans << endl;
  133.  
  134.  
  135.  
  136. int n; cin >> n;
  137. vector<int> v(n);
  138. for (int i = 0; i < n; i++) cin >> v[i];
  139. int rpcount = 0;
  140. dividenconquer(v, 0, n - 1, rpcount);
  141. cout << rpcount << endl;
  142. return 0;
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement