Advertisement
Guest User

Untitled

a guest
Jul 21st, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.09 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int s[500005] = {};
  4. int tmp[500005] = {};
  5. long long int ans = 0;
  6. void merge_sort(int l, int r){
  7. if(r-l==0){
  8. return;
  9. }else if(r-l==1){
  10. if(s[r]<s[l]){
  11. swap(s[r],s[l]);
  12. ans++;
  13. }
  14. return;
  15. }
  16. int m = (l+r)/2;
  17. merge_sort(l, m);
  18. merge_sort(m+1, r);
  19. int L = l, R = m + 1, k = 0, cnt = 0;
  20. while(L<=m&&R<=r){
  21. if(s[L]<=s[R]){
  22. tmp[k] = s[L];
  23. k++;
  24. L++;
  25. ans += cnt;
  26. }else{
  27. tmp[k] = s[R];
  28. k++;
  29. R++;
  30. cnt++;
  31. }
  32. }
  33. while(L<=m){
  34. ans += cnt;
  35. tmp[k] = s[L];
  36. k++;
  37. L++;
  38. }
  39. while(R<=r){
  40. tmp[k] = s[R];
  41. R++;
  42. k++;
  43. }
  44. for(int i = 0 ; i < k ; i++){
  45. s[l+i] = tmp[i];
  46. }
  47. return;
  48. }
  49. int main(){
  50. int n;
  51. ans = 0;
  52. cin >> n;
  53. for(int i = 0 ; i < n ; i++){
  54. cin >> s[i];
  55. }
  56. merge_sort(0,n-1);
  57. cout << ans;
  58. return 0;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement