#include<iostream>
#include<algorithm>
#include<vector>
#include<functional>
#define COL 4
#define ROW 4
#define KTH 3
using namespace std;
struct hpNd{
int value;
int row;
int col;
bool operator<(const hpNd &d) const{
return d.value<value;
}
};
void display(vector<struct hpNd> v){
vector<struct hpNd>::iterator itr;
for(itr=v.begin();itr!=v.end();itr++)
cout<<itr->value<<", "<<itr->row<<", "<<itr->col<<endl;
}
int main(){
int arr[4][4] = { {10, 20, 30, 40},
{15, 25, 35, 45},
{25, 29, 37, 48},
{32, 33, 39, 50},
};
vector<struct hpNd> v;
vector<struct hpNd>::iterator itr;
//make_heap(v.begin(),v.end());
struct hpNd temp;
struct hpNd *temp_ptr;
for(int i=0;i<COL;i++){
temp.value=arr[0][i];
temp.row=0;
temp.col=i;
v.push_back(temp);
push_heap(v.begin(),v.end());
//cout<<endl<<"After insreting "<<arr[0][i]<<" heap is"<<endl;
//display(v);
}
int next_row=0,next_col=0;
for(int i=0;i<KTH-1;i++){
pop_heap(v.begin(),v.end());
temp=v.back();
next_col=temp.col;
next_row=temp.row+1;
v.pop_back();
temp.value=arr[next_row][next_col];
if(next_col>=COL || next_row>=ROW) continue;
temp.row=next_row;
temp.col=next_col;
v.push_back(temp);
push_heap(v.begin(),v.end());
cout<<temp.value<<" is placed."<<endl;
display(v);
}
pop_heap(v.begin(),v.end());
temp=v.back();
cout<<KTH<<" smallest is "<<temp.value<<endl;
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGFsZ29yaXRobT4KI2luY2x1ZGU8dmVjdG9yPgojaW5jbHVkZTxmdW5jdGlvbmFsPgojZGVmaW5lIENPTCA0CiNkZWZpbmUgUk9XIDQKI2RlZmluZSBLVEggMwp1c2luZyBuYW1lc3BhY2Ugc3RkOwpzdHJ1Y3QgaHBOZHsKaW50IHZhbHVlOwppbnQgcm93OwppbnQgY29sOwpib29sIG9wZXJhdG9yPChjb25zdCBocE5kICZkKSBjb25zdHsKICAgIHJldHVybiBkLnZhbHVlPHZhbHVlOwp9Cn07Cgp2b2lkIGRpc3BsYXkodmVjdG9yPHN0cnVjdCBocE5kPiB2KXsKICAgIHZlY3RvcjxzdHJ1Y3QgaHBOZD46Oml0ZXJhdG9yIGl0cjsKICAgIGZvcihpdHI9di5iZWdpbigpO2l0ciE9di5lbmQoKTtpdHIrKykKICAgIGNvdXQ8PGl0ci0+dmFsdWU8PCIsICI8PGl0ci0+cm93PDwiLCAiPDxpdHItPmNvbDw8ZW5kbDsKfQppbnQgbWFpbigpewogICAgaW50IGFycls0XVs0XSA9IHsgezEwLCAyMCwgMzAsIDQwfSwKICAgICAgICAgICAgICAgICAgICB7MTUsIDI1LCAzNSwgNDV9LAogICAgICAgICAgICAgICAgICAgIHsyNSwgMjksIDM3LCA0OH0sCiAgICAgICAgICAgICAgICAgICAgezMyLCAzMywgMzksIDUwfSwKICAgICAgICAgICAgICAgICAgfTsKICAgIHZlY3RvcjxzdHJ1Y3QgaHBOZD4gdjsKICAgIHZlY3RvcjxzdHJ1Y3QgaHBOZD46Oml0ZXJhdG9yIGl0cjsKICAgIC8vbWFrZV9oZWFwKHYuYmVnaW4oKSx2LmVuZCgpKTsKICAgIHN0cnVjdCBocE5kIHRlbXA7CiAgICBzdHJ1Y3QgaHBOZCAqdGVtcF9wdHI7CiAgICBmb3IoaW50IGk9MDtpPENPTDtpKyspewogICAgdGVtcC52YWx1ZT1hcnJbMF1baV07CiAgICB0ZW1wLnJvdz0wOwogICAgdGVtcC5jb2w9aTsKICAgIHYucHVzaF9iYWNrKHRlbXApOwogICAgcHVzaF9oZWFwKHYuYmVnaW4oKSx2LmVuZCgpKTsKICAgIC8vY291dDw8ZW5kbDw8IkFmdGVyIGluc3JldGluZyAiPDxhcnJbMF1baV08PCIgaGVhcCBpcyI8PGVuZGw7CiAgICAvL2Rpc3BsYXkodik7CiAgICB9CiAgICBpbnQgbmV4dF9yb3c9MCxuZXh0X2NvbD0wOwogICAgZm9yKGludCBpPTA7aTxLVEgtMTtpKyspewogICAgcG9wX2hlYXAodi5iZWdpbigpLHYuZW5kKCkpOwogICAgdGVtcD12LmJhY2soKTsKICAgIG5leHRfY29sPXRlbXAuY29sOwogICAgbmV4dF9yb3c9dGVtcC5yb3crMTsKICAgIHYucG9wX2JhY2soKTsKICAgIHRlbXAudmFsdWU9YXJyW25leHRfcm93XVtuZXh0X2NvbF07CiAgICBpZihuZXh0X2NvbD49Q09MIHx8IG5leHRfcm93Pj1ST1cpIGNvbnRpbnVlOwogICAgdGVtcC5yb3c9bmV4dF9yb3c7CiAgICB0ZW1wLmNvbD1uZXh0X2NvbDsKICAgIHYucHVzaF9iYWNrKHRlbXApOwogICAgcHVzaF9oZWFwKHYuYmVnaW4oKSx2LmVuZCgpKTsKICAgIGNvdXQ8PHRlbXAudmFsdWU8PCIgaXMgcGxhY2VkLiI8PGVuZGw7CiAgICBkaXNwbGF5KHYpOwogICAgfQogICAgcG9wX2hlYXAodi5iZWdpbigpLHYuZW5kKCkpOwogICAgdGVtcD12LmJhY2soKTsKICAgIGNvdXQ8PEtUSDw8IiBzbWFsbGVzdCBpcyAiPDx0ZW1wLnZhbHVlPDxlbmRsOwoKICAgIHJldHVybiAwOwp9Cg==
15 is placed.
15, 1, 0
20, 0, 1
30, 0, 2
40, 0, 3
25 is placed.
20, 0, 1
25, 2, 0
30, 0, 2
40, 0, 3
3 smallest is 20