题目大意
解题思路
(1) 这道题没有了武力值唯一的条件,但是多了如果差距相同输出id
最小的情况。
(2) 因此和热血格斗场一样,如果两个id拥有相同的武力值,我们仅仅保存较小的那个id。
代码
#include<iostream>
#include<map>
#include<algorithm>
using namespace std;
map<int, int> f2id;
int main()
{
int n;
cin >> n;
f2id[1000000000] = 1;
int id, f;
map<int, int>::iterator ite, itep, itel;
while(n--)
{
cin >> id >> f;
if(f2id.find(f) != f2id.end())
{
cout << id << " " << f2id.find(f)->second << endl;
f2id[f] = min(id, f2id.find(f)->second);
continue;
}
ite = f2id.lower_bound(f);
if(ite == f2id.begin())
cout << id << " " << ite->second << endl;
else if(ite == f2id.end())
{
ite--;
cout << id << " " << ite->second << endl;
}
else
{
int pid, pf;
int lid, lf;
ite--;
pid = ite->second;
pf = ite->first;
ite++;
lid = ite->second;
lf = ite->first;
if(lf-f == f-pf)
cout << id << " " << min(pid, lid) << endl;
else if(lf-f > f-pf)
cout << id << " " << pid << endl;
else
cout << id << " " << lid << endl;
}
f2id[f] = id;
}
return 0;
}