#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;
    }

}
