首页 > 代码库 > HDU 4585
HDU 4585
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=1 ;ma.lv= 1000000000 ; 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 0 ;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。