ダイナミック中央値

タイトル
を順次、整数のシーケンスを読んで整数の数が読み取られたそれぞれの時間は、現在の中央値の出力奇数であります

説明は
2つのスタック、大根のスタック、小さなヒープルートを確立し、
スタックデータの細根スタック数が少ない+1大ルートに等しいよりも
電流が少ない挿入スタック細根の数を超える場合、スタックが空の細根が、挿入された場合に毎回スタックの最上部には、スタックは、大きな根に挿入され、そして、有効な2つのスタック、不正交換、すなわち、現在のメジアンパイル上部細根の数か否かを判断します

1の#include <ビット/ STDC ++ H>
 2  の#define PII対<整数、整数>
 3  の#define PB一back
 4  の#define Fiの第
 5  の#define SE第
 6  使って 名前空間STDを、
7  CONST  INT N = 1E5 + 10 8  int型T、N。
9  INT メイン(){
 10の      IOS :: sync_with_stdio(0 )。
11      cin.tie(0 )。
12      cout.tie(0 )。
13      CIN >> T。
14      int型のIDX。
15      一方(t-- ){
 16          CIN >> IDX >> N。
17          COUT << IDX << '  ' << N / 2 + 1 << ENDL。
18          PRIORITY_QUEUE < INT、ベクトル< INT >、大きな< INT >> MIN_。
19          PRIORITY_QUEUE < int型、ベクトル< int型 >> MAX_。
20          INT CNT = 0 21          のためにINT I = 1; I <= N。I ++ ){
 22              のint X。
23              cinを>> X;
24              であれば(min_.empty())
 25                  min_.push(X)。
26              他に あれば(min_.empty()&& X <!min_.top())
 27                  max_.push(x)は、
28              
29                  min_.push(x)は、
30  
31              であれば(min_.size()> max_.size()+ 1 ){
 32                  INT TMP = min_.top()。
33                  min_.pop()。
34                  max_.push(TMP)。
35             }
 36              であれば(max_.size()> min_.size()){
 37                  INT TMP = max_.top()。
38                  max_.pop()。
39                  min_.push(TMP)。
40              }
 41              であれば(I&1 ){
 42                  CNT ++ 43                  COUT << min_.top()<< '  ' 44              }
 45              であれば(CNT == 10 ){
 46                  COUT << ENDL。
47                  CNT = 0 48              }
 49          }
 50          COUT << ENDL。
51      }
 52 }

 

おすすめ

転載: www.cnblogs.com/hhyx/p/12432018.html