Advertisement
Guest User

Untitled

a guest
Oct 27th, 2016
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.66 KB | None | 0 0
  1. #include <cstdio>
  2. #include <vector>
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. unsigned long long n, m, a, b, summ = 0;
  8. unsigned int cur = 0;
  9. unsigned long long ch_l[10000000], ch_r[10000000];
  10.  
  11. void Merge(unsigned int l, unsigned int m, unsigned int r, unsigned int *a, unsigned int *buffer) {
  12. unsigned int i = 0, right = m, left = l;
  13. while ( left != m && right != r) {
  14. if (*(a + left) < *(a + right)){
  15. buffer[i] = (*(a + left));
  16. // ch_l[*(a+left)]+=m-left;
  17. ch_r[*(a+left)]+=right-m;
  18. left++; i++;
  19. // if (left-1 != l)
  20. // summ += (m - left)*(right - m);
  21.  
  22. }
  23. else{
  24. buffer[i] = (*(a + right));
  25. // cout << *(a + left) << " "<< *(a + right) << " " << (m - left)<<"*" <<(right - m)<<" "<<endl;
  26. // if (right == n/2)
  27. // summ += (m - left)*(right+1 - m);
  28. //else
  29.  
  30. ch_l[*(a+right)]+=m-left;
  31. //ch_r[*(a+right)]+=right-m;
  32. // summ += (m - left)*(right - m);
  33. right++;i++;
  34.  
  35. // if (right-1 != r)
  36.  
  37. }
  38. // for(int i = 0; i < n; ++i)
  39. // cout << *(a + i);
  40. // cout << endl;
  41.  
  42. }
  43. if (left != m) {
  44. while (left != m) {
  45. buffer[i] = (*(a + left));
  46. ch_r[*(a+left)]+=right-m;
  47. i++;
  48. left++;
  49. }
  50. }
  51. else {
  52. while (right != r){
  53. buffer[i] = (*(a + right));
  54. i++;
  55. ch_l[*(a+right)]+=m-left;
  56. //ch_r[*(a+right)]+=right-m;
  57. right++;
  58. }
  59. }
  60. for (unsigned int u = 0; u < r - l; u++) {
  61. *(a + l + u) = *(buffer + u);
  62. }
  63.  
  64. }
  65.  
  66. void MergeSort( unsigned int l, unsigned int r, unsigned int *a, unsigned int *buffer) {
  67. if (r - l <= 1) return;
  68. int m = (l + r) / 2;
  69. MergeSort(l, m, a, buffer);
  70. MergeSort(m, r, a, buffer);
  71. Merge(l, m, r, a, buffer);
  72. }
  73.  
  74. int main() {
  75. freopen("text.in", "r", stdin);
  76. // freopen("mega.out", "w", stdout);
  77. cin >> n;
  78. unsigned int x;
  79. vector <unsigned int> vec;
  80. for (int i = 0; i < n; i++) {
  81. cin >> b;
  82. vec.push_back(b);
  83. // cout << vec[i] << " ";
  84. }
  85. // cout << endl;
  86. unsigned int *a;
  87. a = &vec[0];
  88. unsigned int bupp[vec.size()];
  89. unsigned int *buffer;
  90. buffer = &bupp[0];
  91. unsigned int l = 0, r = n;
  92. MergeSort(l, r, a, buffer);
  93. for (int i = 1; i <= n; i++) {
  94. summ+= ch_l[i]*ch_r[i];
  95. cout << i << " " << vec[i-1] << " -> " << ch_l[i] << " " << ch_r[i] << endl;
  96. }
  97. // cout << endl;
  98. cout << summ;
  99. return 0;
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement