1927番最小お尻


質問元:https://www.acmicpc.net/problem/1927
優先順位Qを勉強した以上、問題を解いてみようかと思いますが、少なくともお尻の問題が出てきました.
優先度Qを簡単に振り返ってみましょう.
通常のキューは、要素に優先度があると仮定して、優先度キューは通常のキューとは異なります.(ex.救急室、優先度が高いほど、まず起動します.)
しかし、これらの優先順位キューを配列や接続リストとして実装するとどうなるのでしょうか.

整列


あるインデックスの要素にアクセスするためにはO(1)以上の演算が要求されるため,インデックスが多ければ多いほど効率的に実行されない.

接続リスト


同じです.接続リストは挿入と削除に有効であり、検索値が配列と同様に非効率的に動作します.
したがって、優先キューは、データ構造としてを使用する.

Pythonでお尻をどう表現しますか?

  • ここで待ってPythonでは優先キューがサポートされていますが、優先キューはhipで実現されます.
  • import heapqPythonでは、heapqはhipの実装を基本的にサポートする内蔵モジュールであり、このときhipは基本的に最小のhipに従う.また,hipは単独のオブジェクトとして新しく作成されたものではなく,リストをパラメータとして,それ自体がhipとして用いられる.
    例を挙げる.
    import heapq
    heap = []
    
    heapq.heappush(heap,2)
    heapq.heappush(heap,1)
    heapq.heappush(heap,6)
    heapq.heappush(heap,4)
    print(heap)
    
    >>>[1,2,6,4]
    
    heapq.heappop(heap)
    
    >>>[2,4,6]
    どうして[1.2.6.4]ですか.
    これは、最小hipがindex=0に最小値を配置し、兄弟ノードのサイズを比較することなく、ツリーのheightレベルでサイズを比較する非常に重要な部分です.したがって、2番目に小さい値を得るためには、エラーによって最小の要素を削除し、次の小さな最小値に達することができる.
    なぜまた[2,4,6]なのか.
    ...Pythonでお尻の動きを学ぶ必要があるようです
    import sys
    import heapq
    
    N = int(sys.stdin.readline().rstrip("\n"))
    heap = []
    for _ in range(N) :
        n = int(sys.stdin.readline().rstrip("\n"))
        if n!=0 :
            heapq.heappush(heap,n)
        else :
            if not heap :
                print("0")
            else :
                print(heapq.heappop(heap))
    最大の臀部応用は−であり,判断を最小にする.

    どこでこんなに時間の差があるのでしょうか.
    まだ勉強中なので、間違ったところがあれば、よろしくお願いします.至れり尽くせりの批判と訂正に感謝します.