[伯俊]112,79号:最大お尻



📌 質問する
広く知られている資料構造の中で、最大のお尻があります.最大hipを使用して、次の演算をサポートするプログラムを作成します.
  • 配列に自然数xを加える.
  • アレイの最大値を出力し、アレイから削除します.
  • プログラムは最初に空の配列から始まります.
    入力
    第1行は、演算の個数N(1≦N≦100000)を与える.次のN行には、演算に関する情報を表す整数xが与えられる.xが自然数の場合、xを配列に追加する演算です.xが0の場合、配列の最大値が出力され、配列から削除されます.入力された自然数は231未満です.
    しゅつりょく
    入力では、0は所定の回数に等しく、答えを出力します.配列が空で、最大値を出力する必要がある場合は、0を出力します.
    入力例1
    13
    0
    1
    2
    0
    0
    3
    2
    1
    0
    0
    0
    0
    0
    サンプル出力1
    0
    2
    1
    3
    2
    1
    0
    0
    📌 答えを出す.
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Collections;
    import java.util.PriorityQueue;
    
    public class Main {
    
        static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        static StringBuilder sb = new StringBuilder();
    
        static int N;
    
        static PriorityQueue queue = new PriorityQueue(Collections.reverseOrder());
    
        public static void base() throws IOException {
            N = Integer.parseInt(br.readLine());
        }
    
        public static void main(String[] args) throws IOException {
            base();
    
            for(int i=0; i<N; i++) {
                int now = Integer.parseInt(br.readLine());
    
                if(now == 0) {
                    if(queue.size() != 0) {
                        sb.append(queue.poll()).append("\n");
                    } else {
                        sb.append(0).append("\n");
                    }
                } else {
                    queue.offer(now);
                }
            }
    
            System.out.println(sb);
        }
    }
    📌 説明する.
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.PriorityQueue;
    
    public class Main {
    
        static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        static StringBuilder sb = new StringBuilder();
    
        static int N;
        static PriorityQueue<Integer> queue = new PriorityQueue<>();
    
        public static void base() throws IOException {
            N = Integer.parseInt(br.readLine());
        }
    
        public static void main(String[] args) throws IOException {
            base();
    
            for(int i=0; i<N; i++) {
                int temp = Integer.parseInt(br.readLine());
    
                if(temp == 0) {
                    if(queue.isEmpty())
                        sb.append(0).append("\n");
                    else
                        sb.append(queue.poll() * -1).append("\n");
                } else {
                    queue.offer(temp * -1);
                }
            }
    
            System.out.println(sb);
        }
    }