Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <algorithm>
- using namespace std;
- vector<int> d;
- void heap_add(vector <pair <int, int>> &h, int x, int pos)
- {
- h.push_back(make_pair(x, pos));
- d.push_back(h.size() - 1);
- pos = h.size() - 1;
- while (pos >= 0 && h[(pos) / 2].first > h[pos].first)
- {
- swap(h[(pos) / 2], h[pos]);
- swap(d[h[pos].second], d[h[(pos) / 2].second]);
- pos = (pos) / 2;
- }
- }
- void heapify(vector <pair <int, int>> &h, int i, int x)
- {
- while (2 * i + 1 < x)
- {
- int j = 2 * i + 1;
- if ((j + 1) < x && h[j].first < h[j + 1].first)
- j++;
- if (h[i].first >= h[j].first)
- break;
- swap(h[j], h[i]);
- swap(d[h[i].second], d[h[j].second]);
- i = j;
- }
- }
- void DEL(vector <pair <int, int>> &h, int k)
- {
- int j = d[k];
- swap(h[j], h[h.size() - 1]);
- swap(d[h[j].second], d[h[h.size() - 1].second]);
- h.pop_back();
- heapify(h, j, h.size());
- }
- void FIND(vector <pair <int, int>> &h, int m)
- {
- vector<int> a;
- int max_a = min(64, int(h.size()));
- for (int i = 0; i < max_a; i++)
- a.push_back(h[i].first);
- nth_element(a.begin(), a.begin() + m, a.end());
- cout << a[m] << endl;
- }
- int main()
- {
- int n, x, m, k;
- char s;
- cin >> n;
- vector <pair <int, int>> h;
- int count = 0;
- for (int i = 0; i < n; i++)
- {
- cin >> s;
- if (s == 'A')
- {
- for (int i = 0; i < 3; i++)
- cin >> s;
- cin >> x;
- heap_add(h, x, count);
- count++;
- cin >> s;
- continue;
- }
- if (s == 'F')
- {
- for (int i = 0; i < 4; i++)
- cin >> s;
- cin >> m;
- m--;
- FIND(h, m);
- cin >> s;
- continue;
- }
- if (s == 'D')
- {
- for (int i = 0; i < 3; i++)
- cin >> s;
- cin >> k;
- k--;
- DEL(h, k);
- cin >> s;
- continue;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement