アーガス
制限時間: 1000ミリ秒 | メモリの制限: 30000K | |
合計提出: 12282 | 受け入れ: 6110 |
説明
データ・ストリームは、リアルタイム、項目の連続、順序付けられたシーケンスです。いくつかの例は、Web利用状況ログや通話記録などのセンサデータ、インターネットトラフィック、金融ティッカー、オンラインオークション、およびトランザクションログが含まれます。同様に、ストリームに対する問合せは、時間をかけて継続的に実行し、インクリメンタルに新しいデータが到着すると、新しい結果を返します。例えば、工場、倉庫の温度検出システムは、次のようなクエリを実行してもよいです。
私たちは、データストリームを超えるクエリを処理アーガスと呼ばれるデータストリーム管理システムを開発しました。ユーザーはアーガスへのクエリを登録することができます。アーガスは、変更データ上で動作するクエリを保持し、所望の周波数に対応するユーザに結果を返します。
アーガスのために、我々は、クエリを登録するには、次の命令を使用します。
Q_num(0 <Q_num <= 3000)クエリID番号、および期間(0 <期間<= 3000)結果の二つの連続リターンの間隔があります。レジスタの期間秒後、結果が最初に返され、その後、結果はすべての期間の秒を返されます。
ここでは、一度にアーガスに登録し、いくつかの異なるクエリを持っています。すべてのクエリが異なるQ_numを持っていることが確認されました。あなたの仕事は結果を返すために、最初のKクエリを伝えることです。2つの以上のクエリが同時に結果を返すようにしている場合、彼らはQ_numの昇順に1による結果の1を返します。
クエリ-1:「5分ごとに、過去5分間かけて最高温度を取得します。」
クエリ-2:「過去10分かけて、各フロアに測定された平均温度を返します。」
私たちは、データストリームを超えるクエリを処理アーガスと呼ばれるデータストリーム管理システムを開発しました。ユーザーはアーガスへのクエリを登録することができます。アーガスは、変更データ上で動作するクエリを保持し、所望の周波数に対応するユーザに結果を返します。
アーガスのために、我々は、クエリを登録するには、次の命令を使用します。
登録Q_num期間
Q_num(0 <Q_num <= 3000)クエリID番号、および期間(0 <期間<= 3000)結果の二つの連続リターンの間隔があります。レジスタの期間秒後、結果が最初に返され、その後、結果はすべての期間の秒を返されます。
ここでは、一度にアーガスに登録し、いくつかの異なるクエリを持っています。すべてのクエリが異なるQ_numを持っていることが確認されました。あなたの仕事は結果を返すために、最初のKクエリを伝えることです。2つの以上のクエリが同時に結果を返すようにしている場合、彼らはQ_numの昇順に1による結果の1を返します。
入力
入力の最初の部分はアーガス、1行に1つの命令にレジスタ命令です。あなたは、命令の数が1000を超えないと仮定することができ、これらのすべての命令が同時に実行されています。この部分は、「#」の行で終わっています。
第二部では、あなたの仕事です。この部分は、一つの正の整数K(<= 10000)である、唯一の行を含みます。
第二部では、あなたの仕事です。この部分は、一つの正の整数K(<= 10000)である、唯一の行を含みます。
出力
あなたは、出力結果を返すように最初のKクエリ、1行に1つの数のQ_num必要があります。
サンプル入力
レジスタ2004 200 登録300 2005年の # 5
サンプル出力
2004年 2005 2004年 2004年 2005
質問意図されている:タスクID(各タスクのためのユニークな)所与のタスクの数、及び実行間隔(各タスク一意ではない); k番目のタスクID番号の出力前に必要な実行時間に応じて、2実行時に、同じタスクでは、まず小さな出力のID
プライオリティキュー
#include <iostreamの> する#include < ストリング > の#include < 文字列・H> の#include <キュー> 使用して 名前空間STD; 構造体ノード { int型のID; INT T; int型next_t; } TEMP; BOOL 演算子 <(ノードX、Yノード)// 過負荷が小さいから大型まで、数未満である { IF(== XT YT) 戻り x.id> ; y.id 他の リターン XT> ; YT } PRIORITY_QUEUE <ノード> P。 INT メイン() { ストリングS。 int型のk; 一方、(CIN >> S) { もし、(S [ 0 ] == ' #' ) { CIN >> K。 破ります; } 他 { CIN >> temp.id >> temp.t。 temp.next_t = temp.t。 p.push(TEMP)。 } } 一方(k-- ) { TEMP = p.top()。 p.pop(); COUT << temp.id << ENDL; temp.t = temp.next_t + temp.t; //は、この番号が最初に表示される更新 ; p.push(TEMP)を// キューに格納されています中に入る } を返す 0 ; }