#include <iostream>
#include <vector>
#include  <utility>
using namespace std;

void myfUNC(std::vector<std::pair<unsigned int,unsigned int>>& smallGateBucketList)
{
    unsigned int idx = 0;
    unsigned int lastIdx = smallGateBucketList.size() - 1;
    while(idx < lastIdx){
        unsigned int& pSubGateBucket = smallGateBucketList[idx].first;
        unsigned int& remSubBucketSize = smallGateBucketList[idx].second;
        unsigned int& pLastSubGateBucket = smallGateBucketList[lastIdx].first;
        if(remSubBucketSize >= pLastSubGateBucket) {
            smallGateBucketList[idx].second -= pLastSubGateBucket;
            std::cout<<"\n Merged : data 1 : "<<pSubGateBucket<<" , "<<remSubBucketSize;
            std::cout<<" : data 2 : "<<pLastSubGateBucket<<" , "<<smallGateBucketList[lastIdx].second;
            lastIdx--;
            pLastSubGateBucket = 0;
        }
        else{
            ++idx;
        }
    }
}
    
int main() {
    cout << "Hello Geek!";
    //std::vector<std::pair<int,int>> kk;
    //kk.push_back(make_pair(2,2));
    std::vector<std::pair<unsigned int,unsigned int>> smallGateBucketList;
    smallGateBucketList.push_back(make_pair(8000, 2000));
    smallGateBucketList.push_back(make_pair(6000, 4000));
    smallGateBucketList.push_back(make_pair(5000, 5000));
    smallGateBucketList.push_back(make_pair(4000, 6000));
    smallGateBucketList.push_back(make_pair(2000, 8000));
    smallGateBucketList.push_back(make_pair(500, 9500));
    smallGateBucketList.push_back(make_pair(200, 9800));
    smallGateBucketList.push_back(make_pair(50, 9950));
    
    myfUNC(smallGateBucketList);
    for(auto& data : smallGateBucketList){
        std::cout<<"\n data : "<<data.first<<" , "<<data.second;
    }
    return 0;
}