Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- struct Student{
- int number;
- int point;
- };
- void sift_down(Student* &a, int n, int i) {
- int left = 2 * i + 1;
- int right = 2 * i + 2;
- int ind_of_min = i;
- if (left < n && a[left].point < a[i].point) {
- ind_of_min = left;
- }
- if (left < n && a[left].point == a[i].point){
- if (a[left].number > a[ind_of_min].number){
- ind_of_min = left;
- }
- }
- if (right < n && a[right].point < a[ind_of_min].point) {
- ind_of_min = right;
- }
- if (right < n && a[right].point == a[ind_of_min].point) {
- if (a[right].number > a[ind_of_min].number){
- ind_of_min = right;
- }
- }
- if (ind_of_min != i) {
- swap(a[i], a[ind_of_min]);
- sift_down(a, n, ind_of_min);
- }
- }
- void build_heap(Student* &a, int n) {
- for (int i = n / 2 - 1; i >= 0; --i) {
- sift_down(a, n, i);
- }
- }
- void heap_sort(Student* &arr, int n) {
- build_heap(arr, n);
- for (int i = n - 1; i >= 0; i--) {
- swap(arr[0], arr[i]);
- sift_down(arr, i, 0);
- }
- }
- ////3 1 1 2 1 2 1
- int main() {
- int n;
- cin >> n;
- Student* arr = new Student[n];
- for (int i = 0; i < n; ++i) {
- cin >> arr[i].number >> arr[i].point ;
- }
- heap_sort(arr, n);
- for (int i = 0; i < n; ++i) {
- cout << arr[i].number << ' ' << arr[i].point << '\n';
- }
- delete[] arr;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement