HDU 4585

时间:2021-08-16 10:01:31

http://acm.hdu.edu.cn/showproblem.php?pid=4585

从原来的人中找出战斗数值最接近的,输出他们两人的序号

要在logn的复杂度完成查找,我用的是set,当然用map也可以,两个内部都是红黑树实现

水题一道

#include <iostream>
#include <cstdio>
#include <set>
#include <cmath>
using namespace std ;
struct node
{
int id,lv ;
friend bool operator <(node a,node b)//按lv从小到大排序
{
return a.lv>b.lv;
}
} ;
int main()
{
int n ;
set <node> S ;
while(~scanf("%d",&n),n)
{
S.clear() ;
node ma ;
ma.id= ;ma.lv= ;
S.insert(ma) ;
while(n--)
{
scanf("%d%d",&ma.id,&ma.lv) ;
set <node>::iterator it,it1 ;
it=S.lower_bound(ma) ;
if(it==S.begin())
{
printf("%d %d\n",ma.id,it->id) ;
}
else
{
it1=it ;
it-- ;
if(fabs(it1->lv-ma.lv)>fabs(it->lv-ma.lv))
{
printf("%d %d\n",ma.id,it->id) ;
}
else
{
printf("%d %d\n",ma.id,it1->id) ;
}
}
S.insert(ma) ;
}
}
return ;
}