Problem:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

Priority Queue

A priority queue is a data structure which maintains a set $S$ of elements, each of with an associated value (key), and supports the following operations:

$insert(S, k)$: insert an element $k$ into the set $S$

$extractMax(S)$: remove and return the element of $S$ with the largest key

Write a program which performs the $insert(S, k)$ and $extractMax(S)$ operations to a priority queue $S$.
The priority queue manages a set of integers, which are also keys for the priority.

Input

Multiple operations to the priority queue $S$ are given. Each operation is given by "insert $k$", "extract" or "end" in a line. Here, $k$ represents an integer element to be inserted to the priority queue.

The input ends with "end" operation.

Output

For each "extract" operation, print the element extracted from the priority queue $S$ in a line.

Constraints

The number of operations $\leq 2,000,000$

$0 \leq k \leq 2,000,000,000$

Sample Input 1

insert 8
insert 2
extract
insert 10
extract
insert 11
extract
extract
end

Sample Output 1

8
10
11
2

Solution in Python3 (judge verdict: Time Limit Exceeded)

#coding: utf-8
def maxHeapify(A, i):
    l = 2 * i
    r = 2 * i  + 1
    H = len(A)

    if l <= H and A[l-1] > A[i-1]:
        largest = l
    else:
        largest = i

    if r <= H and A[r-1] > A[largest-1]:
        largest = r

    if largest != i:
        A[i-1], A[largest-1] = A[largest-1], A[i-1]                                                                                                                                    
        maxHeapify(A, largest)
        
def Insert(key):
    A.append(key)
    i = len(A)
    while i > 1 and A[i // 2 - 1] < A[i-1] :
        A[i-1], A[i // 2 - 1] = A[i // 2 - 1], A[i - 1]
        i = i// 2

def heapExtractMax(A):
    if len(A) == 0:
        return
    maxv = A[0]
    A[0] = A[-1]
    maxHeapify(A, 1)
    A.pop()

    return maxv

A = []
while True:
    data = list(input().split())
    if data[0] == "insert":
        Insert(int(data[1]))
    elif data[0] == "extract":
        maxv = heapExtractMax(A)
        print(maxv)
    else:
        break