#include<bits/stdc++.h>
using namespace std;
struct node{
int x;
int y;
int z;
};
struct comparator{
//using operator overloading
bool operator()(node &n1, node &n2){
int sum1=n1.x+n1.y+n1.z;
int sum2=n2.x+n2.y+n2.z;
//ordering
if(sum1>sum2)
return true;
else
return false;
}
};
int main(){
int arr[]={2,3,6,5,1};
int n=5;
//max-heap
priority_queue<int>pq1;
for(int i=0;i<n;i++){
pq1.push(arr[i]);
}
cout<<"Max-heap\n";
while(!pq1.empty()){
int value=pq1.top();
pq1.pop();
cout<<value<<endl;
}
//min-heap
priority_queue<int,vector<int>,greater<int>>pq2;
for(int i=0;i<n;i++){
pq2.push(arr[i]);
}
cout<<"Min-heap\n";
while(!pq2.empty()){
int value=pq2.top();
pq2.pop();
cout<<value<<endl;
}
//using custom data type
priority_queue<node,vector<node>,comparator>pq3;
for(int i=0;i<n;i++){
int x,y,z;
cin>>x>>y>>z;
pq3.push(node{x,y,z});
}
cout<<"Using Custom datatype\n";
while(!pq3.empty()){
node temp=pq3.top();
pq3.pop();
cout<<temp.x<<" "<<temp.y<<" "<<temp.z<<endl;
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKc3RydWN0IG5vZGV7CiAgICBpbnQgeDsKICAgIGludCB5OwogICAgaW50IHo7Cn07CgpzdHJ1Y3QgY29tcGFyYXRvcnsKICAgIC8vdXNpbmcgb3BlcmF0b3Igb3ZlcmxvYWRpbmcKICAgIGJvb2wgb3BlcmF0b3IoKShub2RlICZuMSwgbm9kZSAmbjIpewogICAgICAgIGludCBzdW0xPW4xLngrbjEueStuMS56OwogICAgICAgIGludCBzdW0yPW4yLngrbjIueStuMi56OwogICAgICAgIC8vb3JkZXJpbmcKICAgICAgICBpZihzdW0xPnN1bTIpCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQp9OwppbnQgbWFpbigpewogICAgaW50IGFycltdPXsyLDMsNiw1LDF9OwogICAgaW50IG49NTsKICAgIC8vbWF4LWhlYXAKICAgIHByaW9yaXR5X3F1ZXVlPGludD5wcTE7CiAgICBmb3IoaW50IGk9MDtpPG47aSsrKXsKICAgICAgICBwcTEucHVzaChhcnJbaV0pOwogICAgfQogICAgY291dDw8Ik1heC1oZWFwXG4iOwogICAgd2hpbGUoIXBxMS5lbXB0eSgpKXsKICAgICAgICBpbnQgdmFsdWU9cHExLnRvcCgpOwogICAgICAgIHBxMS5wb3AoKTsKICAgICAgICBjb3V0PDx2YWx1ZTw8ZW5kbDsKICAgIH0KCiAgICAvL21pbi1oZWFwCiAgICBwcmlvcml0eV9xdWV1ZTxpbnQsdmVjdG9yPGludD4sZ3JlYXRlcjxpbnQ+PnBxMjsKICAgIGZvcihpbnQgaT0wO2k8bjtpKyspewogICAgICAgIHBxMi5wdXNoKGFycltpXSk7CiAgICB9CiAgICBjb3V0PDwiTWluLWhlYXBcbiI7CiAgICB3aGlsZSghcHEyLmVtcHR5KCkpewogICAgICAgIGludCB2YWx1ZT1wcTIudG9wKCk7CiAgICAgICAgcHEyLnBvcCgpOwogICAgICAgIGNvdXQ8PHZhbHVlPDxlbmRsOwogICAgfQoKCiAgICAvL3VzaW5nIGN1c3RvbSBkYXRhIHR5cGUKICAgIHByaW9yaXR5X3F1ZXVlPG5vZGUsdmVjdG9yPG5vZGU+LGNvbXBhcmF0b3I+cHEzOwogICAgZm9yKGludCBpPTA7aTxuO2krKyl7CiAgICAgICAgaW50IHgseSx6OwogICAgICAgIGNpbj4+eD4+eT4+ejsKICAgICAgICBwcTMucHVzaChub2Rle3gseSx6fSk7CiAgICB9CiAgICBjb3V0PDwiVXNpbmcgQ3VzdG9tIGRhdGF0eXBlXG4iOwogICAgd2hpbGUoIXBxMy5lbXB0eSgpKXsKICAgICAgICBub2RlIHRlbXA9cHEzLnRvcCgpOwogICAgICAgIHBxMy5wb3AoKTsKICAgICAgICBjb3V0PDx0ZW1wLng8PCIgIjw8dGVtcC55PDwiICI8PHRlbXAuejw8ZW5kbDsKICAgIH0KCn0K