トピックリンク:
https://ac.nowcoder.com/acm/problem/50439
アイデア:
キューが少ない兵士の現在の数は、人々の数を必要とするよりも、とき、兵士は最小に入れた後、その後、トラバース、標準降順として、すべての兵士を必要とする第1のS(初心者の鶏肉料理はキューQAQについて考え始めるませんでした)逆プライオリティキューの値は、資格まで、人々(つまり、チームのヘッド)の最小のキューの容量値をポップします。横断中に記録された最大値。
問題解決コード:
1の#include <cstdioを> 2の#include <iostreamの> 3の#include <アルゴリズム> 4の#include <cmath> 5の#include < ストリング > 6の#include <CStringの> 7の#include <マップ> 8の#include <キュー> 9 使用 名前空間ははstd; 10 CONST 長い 長い MAXN = 1E5 + 7 。 11 typedefの長い 長いLL。 12 構造体人 13 { 14 INT V。 15 INTS; 16 } P [ 100010 ]; 17 PRIORITY_QUEUE < INT、ベクトル< INT >、大< INT >> P2; // 最小プライオリティキュー 18は BOOL CMP(A人、人B) 19 { 20は、 リターン AS> BS 、 21である } 22は 、INT (メイン) 23である { 24 INT N-; 25 LL SUM = 0、MAXNUM = 0 ; 26である CIN >> N-、 27 のために(INT I =。1 ; I <= N; I ++ ) 28 { 29 CIN >> P [I] .V >> P [I] .S; 30 } 31で 並び替え(P + 1、P + 1 + 、N-、CMP); 32 用(INT = I 1、I; <= N-I ++ ) 33である { 34がある 一方 = P [I] .S)(p2.size()> // キューが以下の兵士の現在の数は、キュー・ポップの最小値を必要としないよりなると人 35 { 36 SUM - = p2.top(); 37 p2.pop(); 38である } 39 SUM = +P [i]は.V。 40 p2.push(P [i]は.V)。 41 MAXNUM = MAX(MAXNUM、合計)。 42 } 43 COUT << MAXNUM << ENDL。 44 45 戻り 0 ; 46 }