1- Insert 2 - delete an element 3- Min element It's a hackerrank problem named QHEAP1. Here's the link- https://www.hackerrank.com/challenges/qheap1 It is working for integer values but it's not working correctly for long values.
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
void swap(long *,long *);
class Heap{
long h[1000000];
long size=0;
public:
long parent(long i){
return (i-1)/2;}
long left(long i){
return 2*i+1;}
long right(long i){
return 2*i+2;}
void insert(long);
void heapify(long);
void extractMin();
void del(long);
void printHeap();
};
void Heap::printHeap(){
for(int i=0;i<size;i++)
cout<<h[i]<<" ";
cout<<endl;
}
void Heap::insert(long x){
long i=size;
h[i]=x;
size++;
if(i!=0 && h[parent(i)]>h[i]){
swap(&h[parent(i)],&h[i]);
i = parent(i);
}
heapify(0);
}
void Heap::heapify(long i){
long l=left(i);
long r=right(i);
long smallest = i;
if(l<size && h[l]<h[smallest])
smallest = l;
if(r<size && h[r]<h[smallest])
smallest = r;
if(smallest!=i){
swap(&h[smallest],&h[i]);
heapify(smallest);
}
}
void Heap::del(long x){
if(size==1){
size--;
return;
}
long i;
for(i=0;i<size;i++){
if(h[i]==x)
break;
}
swap(&h[i],&h[size-1]);
size--;
heapify(i);
}
void Heap::extractMin(){
cout<<h[0]<<endl;
return;
}
void swap(long *p,long *q){
int temp = *p;
*p = *q;
*q = temp;
}
int main() {
long q;
cin>>q;
Heap h;
while(q!=0){
int opt;
cin>>opt;
if(opt==1){
long v;
cin>>v;
h.insert(v);
// cout<<"1"<<endl;
h.printHeap();
}
else if(opt==2){
long v;
cin>>v;
h.del(v);
//cout<<"2"<<endl;
h.printHeap();
}
else{
h.extractMin();
}
q--;
}
return 0;
}
Here's my custom testcase- Input 18
1 22
1 69
1 36
1 98
1 95
1 -29
1 87
2 98
2 95
1 -100
1 159
2 -100
1 200
1 45
1 -12
1 -200
1 1
1 3
Output
22
22 69
22 69 36
22 69 36 98
22 69 36 98 95
-29 69 22 98 95 36
-29 69 22 98 95 36 87
-29 69 22 87 95 36
-29 69 22 87 36
-100 69 -29 87 36 22
-100 69 -29 87 36 22 159
-29 69 22 87 36 159
-29 69 22 87 36 159 200
-29 69 22 45 36 159 200 87
-29 69 22 -12 36 159 200 87 45
-29 69 22 -12 -200 159 200 87 45 36
-29 69 22 -12 -200 159 200 87 45 36 1
-29 69 22 -12 -200 3 200 87 45 36 1 159
When i entered -200 it didn't become the minimum element.