Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.84 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. class my_pair {
  7. public:
  8. long long nom;
  9. int right_border;
  10.  
  11. my_pair() {}
  12. my_pair(long long a, long long det) {
  13. nom = a;
  14. right_border = det;
  15. }
  16. };
  17.  
  18. class my_heap {
  19. public:
  20. long long one_layer(vector <my_pair> &dot, long long size);
  21.  
  22. private:
  23. void sort_heap(vector<my_pair> &dot, long long diff);
  24. void sift_down(vector<my_pair> &dot, long long number, long long size);
  25. };
  26.  
  27. long long my_heap::one_layer(vector <my_pair> &dot, long long size) {
  28. sort_heap(dot, size);
  29.  
  30. long long res = 0;
  31. long long temp = 1;
  32. my_pair prev = dot[0];
  33.  
  34. for (long long i = 1; i < size; i++) {
  35. if (temp == 1) {
  36. res += dot[i].nom - prev.nom;
  37. }
  38.  
  39. if (dot[i].right_border = 1) {
  40. temp--;
  41. }
  42. if (dot[i].right_border = 0) {
  43. temp++;
  44. }
  45.  
  46. prev = dot[i];
  47. }
  48. return res;
  49. }
  50.  
  51. void my_heap::sift_down(vector<my_pair> &dot, long long number, long long size) {
  52. long long left = 2 * number + 1;
  53. long long right = 2 * number + 2;
  54. long long max = number;
  55.  
  56. if (right < size && dot[right].nom > dot[max].nom) {
  57. max = right;
  58. }
  59. if (left < size && dot[left].nom > dot[max].nom) {
  60. max = left;
  61. }
  62.  
  63. if (max != number) {
  64. swap(dot[max], dot[number]);
  65. sift_down(dot, max, size);
  66. }
  67. }
  68.  
  69. void my_heap::sort_heap(vector<my_pair> &dot, long long diff) {
  70. for (long long i = diff / 2 - 1; i >= 0; i--) {
  71. sift_down(dot, i, diff);
  72. }
  73.  
  74. for (long long i = diff - 1; i >= 0; i--) {
  75. swap(dot[0], dot[i]);
  76. sift_down(dot, 0, i);
  77. }
  78. }
  79.  
  80. int main() {
  81. long long n = 0;
  82. cin >> n;
  83.  
  84. my_heap solvation;
  85. vector <my_pair> array(2 * n);
  86.  
  87. for (long long i = 0; i < 2 * n; i++) {
  88. int right_border = i % 2;
  89.  
  90. int nom = 0;
  91. cin >> nom;
  92. array[i] = my_pair(nom, right_border);
  93. }
  94.  
  95. cout << solvation.one_layer(array, 2 * n);
  96. return 0;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement