code
#include<bits/stdc++.h>
#define ll long long//#define ll long long你值得拥有
using namespace std;
ll n;
struct banana
{
ll size,factor,index;
bool operator<(banana other) const
{
return size>other.size;
}
};
priority_queue <banana> pq;
int main()
{
cin>>n;
vector <banana> bananas(n);
vector <pair<ll,ll>> merges;
for(ll i=0,a,k;i<n;i++)
cin>>a>>k,bananas[i]={a,k,i+1},pq.push(bananas[i]);
while(pq.size()>1)
{
banana b1=pq.top(),b2;
pq.pop(),b2=pq.top(),pq.pop();
ll new_size=b1.size/b1.factor+b2.size/b2.factor,new_index=n+merges.size()+1;
merges.push_back({b1.index,b2.index});
pq.push({new_size,b1.factor,new_index});
}
for(auto merge:merges)
cout<<merge.first<<" "<<merge.second<<endl;
return 0;
}
求 dalao 调,谢!