Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2020
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.26 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. #define ll long long
  5. #define pb push_back
  6.  
  7. int m, n, j, l, k, left, b, right;
  8. ll cnt;
  9. pair<int, string> a[100000];
  10. vector <int> v;
  11.  
  12. void siftup (int i){
  13.     while (a[i] > a[(i - 1) / 2]){
  14.         swap(a[i], a[(i - 1) / 2]);
  15.         i = (i - 1) / 2;
  16.     }
  17. }
  18.  
  19. void siftdown (int i){
  20.     while (2 * i + 1 < n){
  21.         int left = 2 * i + 1;
  22.         int right = 2 * i + 2;
  23.         j = left;
  24.         if (right < n && a[right] > a[left]) j = right;
  25.         if (a[i] >= a[j]) break;
  26.         swap(a[i], a[j]);
  27.         i = j;
  28.     }
  29. }
  30.  
  31. pair<int, string> extractmax (){
  32.     pair<int, string> max = a[0];
  33.     a[0] = a[n - 1];
  34.     n--;
  35.     siftdown(0);
  36.     return max;
  37. }
  38.  
  39. void insert (pair<int, string> m){
  40.     n++;
  41.     a[n - 1] = m;
  42.     siftup(n - 1);
  43. }
  44.  
  45. int main () {
  46.     cin >> k;
  47.  
  48.     int num = 0;
  49.     string s = "";
  50.  
  51.     vector<pair<int, string>> ans;
  52.  
  53.     for (int i = 0; i < k; i++) {
  54.         cin >> num >> s;
  55.         insert({num, s});
  56.     }
  57.  
  58.     for (int i = 0; i < k; ++i) {
  59.         ans.push_back(extractmax());
  60.     }
  61.  
  62.     reverse(ans.begin(), ans.end());
  63.  
  64.     for (int i = 0; i < k; ++i) {
  65.         cout << ans[i].first << ' ' << ans[i].second << endl;
  66.     }
  67.  
  68.     return 0;
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement