Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cmath>
- #include <cstdio>
- #include <vector>
- #include <map>
- #include <iostream>
- #include <climits>
- #include <algorithm>
- using namespace std;
- // Solves this problem: https://www.hackerrank.com/challenges/qheap1/problem?isFullScreen=true
- const int M = 4e5 + 50;
- int heap[M];
- int len;
- int parent(int i)
- {
- return (i-1)/2;
- }
- int left(int i)
- {
- return (2*i + 1);
- }
- int right(int i)
- {
- return (2*i + 2);
- }
- void insert(int x)
- {
- int i = len;
- heap[i] = x;
- ++len;
- while(i!=0 && heap[parent(i)] > heap[i])
- {
- swap(heap[i],heap[parent(i)]);
- i = parent(i);
- }
- }
- void minify(int i)
- {
- int l = left(i);
- int r = right(i);
- int smallest = i;
- if(l<len && heap[l] < heap[smallest])
- smallest = l;
- if(r < len && heap[r] < heap[smallest])
- smallest = r;
- if(smallest != i)
- {
- swap(heap[i],heap[smallest]);
- minify(smallest);
- }
- }
- void del(int x)
- {
- int i;
- for(i = 0 ;i< len;i++)
- if(heap[i] == x)
- break;
- heap[i] = INT_MIN;
- while(i != 0 && heap[parent(i)] > heap[i])
- {
- swap(heap[parent(i)],heap[i]);
- i = parent(i);
- }
- heap[0] = heap[len-1];
- --len;
- minify(0);
- }
- int main()
- {
- len = 0;
- int q;
- cin>>q;
- while(q--)
- {
- int t;
- cin>>t;
- if(t == 3)
- {
- cout<<heap[0]<<endl;
- continue;
- }
- int v;
- cin>>v;
- if(t == 1)
- insert(v);
- else
- del(v);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement