0

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.

yamit01
  • 1
  • 2

0 Answers0