#include <cstdio> #include <iostream> #include <cstring> #include <cmath> #include <map> #include <algorithm> #include <cstdlib> using namespace std; int main() { int n; int id,g; while(scanf("%d",&n) && n) { map<int,int>m; m[1000000000] = 1; for(int i=1; i<=n; ++i) { scanf("%d%d",&id,&g); printf("%d ",id); map<int,int> ::iterator it; it = m.lower_bound(g); // 二分找第一個大於等於g的位置,如果沒有,則返回末尾位置 if(it == m.end()) { it -- ; printf("%d\n",it->second); } else { if(it == m.begin()) { printf("%d\n",it->second); } else { int pos = it->first; int tmp = it->second; it --; printf("%d\n",(pos - g) < (g - it->first) ? tmp : it->second); } } m[g] = id; } } return 0; } #include <cstdio> #include <iostream> #include <cstring> #include <cmath> #include <map> #include <algorithm> #include <cstdlib> using namespace std; int main() { int n; int id,g; while(scanf("%d",&n) && n) { map<int,int>m; m[1000000000] = 1; for(int i=1; i<=n; ++i) { scanf("%d%d",&id,&g); printf("%d ",id); map<int,int> ::iterator it; it = m.lower_bound(g); // 二分找第一個大於等於g的位置,如果沒有,則返回末尾位置 if(it == m.end()) { it -- ; printf("%d\n",it->second); } else { if(it == m.begin()) { printf("%d\n",it->second); } else { int pos = it->first; int tmp = it->second; it --; printf("%d\n",(pos - g) < (g - it->first) ? tmp : it->second); } } m[g] = id; } } return 0; }