Чем можно заменить priority_queue из С++ в Python?

Есть задача - переписать код из С++ на Python. В процессе выполнения этой задачи столкнулся с тем, что в Python в принципе нет аналога для priority_queue. Вот код на С++:

#include <iostream>
#include <queue>
 
int duration[1000]; // Продолжительности обработки для каждого робота
// Очередь деталей на обработку для каждого этапа (сначала те, что готовы раньше)
std::priority_queue <std::pair <int, int>> q; // pair <время готовности детали, номер робота>
 
void fill_q() { // Читаем время работы роботов и заполняем очередь готовности первой детали на каждом
    int n; std::cin >> n;
    for (int i = 0; i < n; i++) {
        std::cin >> duration[i];
        q.emplace(-duration[i], i); // минус, чтобы не возиться с компаратором возрастания
    }
}
 
int next() { // Достаем очередную готовую деталь и "закладываем" следующую для этого робота
    int time = -q.top().first, index = q.top().second; 
    q.pop(); // изымаем деталь
    q.emplace(-time - duration[index], index); // добавляем следующую деталь, обработанную этим роботом
    return time;
}
 
int main() {
    int N; std::cin >> N;
    fill_q(); // <---- первый этап обработки
    int times[N]; // время готовности деталей после первого этапа (от поздних к ранним)
    for (int i = N - 1; i >= 0; i--) times[i] = next(); 
    while (!q.empty()) q.pop(); // очищаем очередь обработки
    fill_q(); // <---- второй этап обработки
    int max_time = 0;
    for (int i = 0; i < N; i++) {
        int t = times[i] + next();
        if (t > max_time) max_time = t;
    }
    std::cout << max_time;
}

А это мой код, написанный на Python. Обычный словарь в данном случае не подойдет.

duration = [1 for i in range (1000)]

q = {} #heapq - не совсем то, что нужно. Нужно что-то вроде TreeMap в Java


def fill_q():
    print("n ")
    n = int(input())
    print("duration[i]")
    for i in range(n):
        duration[i] = int(input())
        #q[i] = i 

def next():
    time = 1 # - q.top().first ?
    index = 1 # q.top().second ?
    # q.pop()
    # q.emplace(-time - duration[index], index) снова-таки не понятно насчет структуры данных, которой можно заменить prority queue
    return time

def proccess():
    print("N ")
    N = int(input())
    fill_q()
    times = [1 for i in range(N)]
    
    for i in range (N - 1, 0, -1):
        times[i] = next()

    while bool(q):
        q.pop()

    fill_q()
    max_time = 0

    for i in range(N):
        t = times[i] + next()
        if t > max_time:
            max_time = t

    return max_time

print(proccess())

Возможно, кто-то знает аналог этой структуре данных в Python или как решить задачу иным способом?


Ответы (0 шт):