首页 > 代码库 > hdu--4585--lower_bound()
hdu--4585--lower_bound()
好久不见 lower_bound()
最近 事情太多了 龙兄 来了宁波 我们几个一起陪他玩了几天 那几天就没碰过题了 昨天他回临安了 明年应该就是我们宁波这3个 过去找他了
我们 设计了很多创业大计 描绘了美好的蓝图 就差 资金到位了 哈哈~~
-------
这题的话 就是开始给你一个人的ID与他的能力值 起初这个集合中只有 一个人:Id 1 能力值 1000000000
后来 每次加入一个人的时候 总是要从这个集合中 找出一个人与他进行PK 这个人的能力值要与他是得到这样的关系min( abs(new-old) )因为这是绝对值得 所以如果存在上界与下界同时满足 取下界 即小于<new的值
这样每次插入一个 输出一个 最后就可以了
但是我的代码 运行时间好tm长啊 要900+ms 一共给的时间也就1000ms 我也是 醉了
顺便 提下lower_bound(var)函数是返回一个序列中大于等于var的第一个位置 注意这是一个前闭后开的区间 所以如果这个var大于这个序列的所有元素 那么返回的将是一个没有元素的位置 即xx.end()
1 #include <iostream> 2 #include <map> 3 using namespace std; 4 5 map<int,int>mp; 6 7 int main() 8 { 9 cin.sync_with_stdio(false);10 int n , Id , grade , var , num;11 while( cin >> n && n )12 {13 mp.clear( );14 map<int,int>::iterator ans;15 mp[1000000000] = 1;16 for( int i = 0 ; i<n ; ++i )17 {18 cin >> Id >> grade;19 if( !i )20 {21 cout << Id << " " << 1 << endl;22 }23 else24 {25 ans = mp.lower_bound( grade );26 if( ans == mp.begin() )27 cout << Id << " " << ans->second << endl;28 else29 {30 var = ans->first;31 num = ans->second;32 --ans;33 if( var-grade < grade-(ans->first) )34 cout << Id << " " << num << endl;35 else36 cout << Id << " " << ans->second << endl;37 }38 }39 mp[ grade ] = Id;40 }41 }42 return 0;43 }
today:
你说 谈恋爱需要靠什么呢?
我什么都不想罗列
最后反正是看脸
hdu--4585--lower_bound()
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。