Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define ll long long
- #define pb push_back
- int m, n, j, l, k, left, b, right;
- ll cnt;
- pair<int, string> a[100000];
- vector <int> v;
- void siftup (int i){
- while (a[i] > a[(i - 1) / 2]){
- swap(a[i], a[(i - 1) / 2]);
- i = (i - 1) / 2;
- }
- }
- void siftdown (int i){
- while (2 * i + 1 < n){
- int left = 2 * i + 1;
- int right = 2 * i + 2;
- j = left;
- if (right < n && a[right] > a[left]) j = right;
- if (a[i] >= a[j]) break;
- swap(a[i], a[j]);
- i = j;
- }
- }
- pair<int, string> extractmax (){
- pair<int, string> max = a[0];
- a[0] = a[n - 1];
- n--;
- siftdown(0);
- return max;
- }
- void insert (pair<int, string> m){
- n++;
- a[n - 1] = m;
- siftup(n - 1);
- }
- int main () {
- cin >> k;
- int num = 0;
- string s = "";
- vector<pair<int, string>> ans;
- for (int i = 0; i < k; i++) {
- cin >> num >> s;
- insert({num, s});
- }
- for (int i = 0; i < k; ++i) {
- ans.push_back(extractmax());
- }
- reverse(ans.begin(), ans.end());
- for (int i = 0; i < k; ++i) {
- cout << ans[i].first << ' ' << ans[i].second << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement