少林寺
制限時間:1000分の3000 MS(Javaの/その他)メモリの制限:32768分の65535 K(Javaの/その他)
の合計提出(S):4370受理提出(S):1883
問題の説明
若い男性のそのKongfu monks.Aの多くは僧侶になろうと、毎年少林寺の寺院に行くために少林寺の寺院は非常に有名です。少林寺のマスターは、仏教の経典を理解する上で彼の才能によって主に若者を評価しますが、戦闘スキルも考慮されます。
若い男は、すべてのテストに合格し、少林寺の新しい僧侶を宣言されている場合は、歓迎会の一環として、戦いがあるでしょう。すべての僧侶は、すべての整数であり、一意のIDとユニークな戦闘グレードを、持っています。新しい僧侶は、その戦いグレード彼の戦いのグレードに最も近い老僧と戦う必要があります。その条件を満たした2歳の僧侶がある場合は、新しい僧侶は、その戦いグレード彼未満の1になります。
マスターは少林寺の最初の僧侶で、彼のidが1である、と彼の戦いのグレードは1,000,000,000.Heはちょうど戦いの記録を失っています。しかし、彼はまだ、後に入社以前少林寺を、参加者覚えています。彼のために戦いの記録を回復してください。
若い男は、すべてのテストに合格し、少林寺の新しい僧侶を宣言されている場合は、歓迎会の一環として、戦いがあるでしょう。すべての僧侶は、すべての整数であり、一意のIDとユニークな戦闘グレードを、持っています。新しい僧侶は、その戦いグレード彼の戦いのグレードに最も近い老僧と戦う必要があります。その条件を満たした2歳の僧侶がある場合は、新しい僧侶は、その戦いグレード彼未満の1になります。
マスターは少林寺の最初の僧侶で、彼のidが1である、と彼の戦いのグレードは1,000,000,000.Heはちょうど戦いの記録を失っています。しかし、彼はまだ、後に入社以前少林寺を、参加者覚えています。彼のために戦いの記録を回復してください。
入力
いくつかのテストケースがあります。各テストケースにおいて:
最初の行は、マスターがした後に少林寺に加わった修道士の数を意味する整数n(0 <N <= 100,000)である(マスターが含まれていない).Then n行が続きます。各ラインは、僧のIDと自分の対戦成績を意味し、2つの整数kおよびGを有している。(0 <= K、G <= 5,000,000)
僧侶が接合time.In言い換えるの昇順でリストされている、以前の少林寺に加わった修道士が来最初。
入力は、n = 0で終了します。
出力
戦いはその戦いをする僧侶の2つのIDとして記述することができます。各テストケースのために、出力時間が起きの昇順ですべての戦い。それぞれのラインで戦います。それぞれの戦いのために、そして、最初の老僧のIDを新しい僧のIDを印刷します。
サンプル入力
3
2 1
3 3
4 2
0
サンプル出力
2 1
3 2
4 2
効果の件名:
1人の少林寺の僧侶たちは、彼らのすべてが、戦いの固有の番号と価値を持って、+ n個あり、歓迎の一環として、若者はすべての試験に合格して、新しい少林寺の僧侶を宣言したとき、戦いがあるでしょう。新しい僧は、最も近い老僧に戦闘評価のレベルに彼の戦いをしなければなりません。この条件を満たす2僧がある場合は、新しい僧侶たちは彼がスパーリングで彼の僧侶より低い戦いのランクがかかります。今入力は老僧の出力の最初の出力の後に、新たな僧侶の数の両方を戦うために、各グループの入力、出力要件の数に応じて昇順にあることを確認してください。(最初の番号が1000000000を戦っている、僧です)
トピック分析:
マップは、あなたが戦いの言葉に従ってキー値としてマップを構築するので、もし、この戦争の後継者と前任者を見つけ、新たなモンクの値を強制する可能性がある、昇順に保存されたキーワードに基づいて格納されている場合ので、このタイトルは、完全に、マップの利点を反映しています老僧をスパーリング。
コード:
#include <ビット/ STDC ++ H> 使用して名前空間STDを、 マップ < int型、int型 > 。 整数nは、ID、レベル、I。 INT メイン() { 一方(のscanf(" %dの"!、&N)= EOF、N = 0 ) { a.clear()。 [ 1000000000 ] = 1 。 用(i = 1 ; iが<= N; iは++ ) { CIN >> ID >> レベル。 [レベル] = ID。 マップ < INT、INT > ::イテレータP = a.find(レベル)。 もし(P == a.begin()) のprintf(" %D%D \ n "、ID、(++ P) - > 秒)。 他の 場合(P == a.end()) のprintf(" %D%D \ n "、ID、( - P) - > 秒)。 それ以外の 場合((ABS((++ P) - >最初) - ( - P) - >最初)<ABS(( - P) - >最初の- (++ P) - > 最初の)) のprintf(" %D%D \ n "、ID、(++ P) - > )は、第2、 他 のprintf("%D%D \ n "、ID、( - P) - > 秒); } } }