Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- template<class T>
- class heap{
- public:
- void add(const T& value){
- arr.push_back(value);
- siftUp(arr.size() - 1);
- }
- T get(){
- T value = arr[0];
- arr[0] = arr.back();
- arr.pop_back();
- siftDown(0);
- return value;
- }
- bool empty() { return arr.empty(); }
- private:
- vector<T> arr;
- void siftUp(size_t v){
- if(v == 0){
- return;
- }
- size_t p = (v - 1) / 2;
- if(arr[p] > arr[v]){
- swap(arr[p], arr[v]);
- siftUp(p);
- }
- }
- void siftDown(size_t v){
- size_t l = 2 * v + 1, r = 2 * v + 2;
- if(l >= arr.size()) {
- return;
- }
- if(l == arr.size() - 1) {
- r = l;
- }
- size_t i_min = arr[l] < arr[r] ? l : r;
- if(arr[v] > arr[i_min]){
- swap(arr[v], arr[i_min]);
- siftDown(i_min);
- }
- }
- };
- int main(){
- heap<int> Heap;
- string cmd;
- while(cin >> cmd){
- if(cmd == "ADD"){
- int n;
- cin >> n;
- Heap.add(n * (-1));
- } else if(cmd == "EXTRACT"){
- if(Heap.empty()){
- cout << "CANNOT\n";
- } else{
- //auto it = Set.begin();
- cout << Heap.get() * (-1) << endl;
- }
- } else if(cmd == "CLEAR"){
- Heap = heap<int>();
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment