标签:style blog http io ar color sp for on
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4585
题目大意:不停的插入数字,问你跟他相距近的ID号。如果有两个距离相近的话选择小的那个。
用map,先用upper_bound找到大的,然后迭代器减1,就能够找到相近的两个。
然后。。用链表不知道为什么有问题。。。。
而且迭代器it,如果减1的话,不能写 it2 = --it1; 这样会wa
但是。。it2 = it1; it2--;这样就AC了,在这里记录一下,今后注意。
1 //#pragma comment( linker, "/STACK:1024000000,1024000000") 2 #include <cstdio> 3 #include <cstring> 4 #include <queue> 5 #include <algorithm> 6 #include <cmath> 7 #include <map> 8 #include <iterator> 9 using namespace std; 10 11 typedef map<int,int>::iterator pt; 12 13 map<int,int> mp; 14 int n; 15 16 int main(){ 17 while(scanf("%d",&n),n){ 18 int k,g; 19 mp.clear(); 20 mp.insert(make_pair(1000000000,1)); 21 for(int i=0;i<n;i++){ 22 scanf("%d%d",&k,&g); 23 pt it2 = mp.upper_bound(g); 24 25 if( it2==mp.begin() ){ 26 printf("%d %d\n",k,it2->second); 27 mp.insert(make_pair(g,k)); 28 continue; 29 } 30 31 pt it1 = it2; 32 it1--; 33 if( abs(g-it1->first)<=abs(g-it2->first) ) { 34 printf("%d %d\n",k,it1->second); 35 } else { 36 printf("%d %d\n",k,it2->second); 37 } 38 mp.insert(make_pair(g,k)); 39 } 40 } 41 return 0; 42 }
标签:style blog http io ar color sp for on
原文地址:http://www.cnblogs.com/llkpersonal/p/4116364.html