Advertisement
Guest User

Untitled

a guest
Dec 8th, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.47 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. struct Student{
  6. int number;
  7. int point;
  8. };
  9.  
  10. void sift_down(Student* &a, int n, int i) {
  11. int left = 2 * i + 1;
  12. int right = 2 * i + 2;
  13. int ind_of_min = i;
  14. if (left < n && a[left].point < a[i].point) {
  15. ind_of_min = left;
  16. }
  17. if (left < n && a[left].point == a[i].point){
  18. if (a[left].number > a[ind_of_min].number){
  19. ind_of_min = left;
  20. }
  21. }
  22. if (right < n && a[right].point < a[ind_of_min].point) {
  23. ind_of_min = right;
  24. }
  25. if (right < n && a[right].point == a[ind_of_min].point) {
  26. if (a[right].number > a[ind_of_min].number){
  27. ind_of_min = right;
  28. }
  29. }
  30.  
  31. if (ind_of_min != i) {
  32. swap(a[i], a[ind_of_min]);
  33. sift_down(a, n, ind_of_min);
  34. }
  35. }
  36.  
  37. void build_heap(Student* &a, int n) {
  38. for (int i = n / 2 - 1; i >= 0; --i) {
  39. sift_down(a, n, i);
  40. }
  41. }
  42.  
  43. void heap_sort(Student* &arr, int n) {
  44. build_heap(arr, n);
  45. for (int i = n - 1; i >= 0; i--) {
  46. swap(arr[0], arr[i]);
  47. sift_down(arr, i, 0);
  48. }
  49. }
  50.  
  51.  
  52. ////3 1 1 2 1 2 1
  53. int main() {
  54. int n;
  55. cin >> n;
  56. Student* arr = new Student[n];
  57. for (int i = 0; i < n; ++i) {
  58. cin >> arr[i].number >> arr[i].point ;
  59. }
  60.  
  61. heap_sort(arr, n);
  62.  
  63. for (int i = 0; i < n; ++i) {
  64. cout << arr[i].number << ' ' << arr[i].point << '\n';
  65. }
  66. delete[] arr;
  67. return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement