【Luogu P1801】 Cola de prioridad de caja negra

Enlace de tema

Un tema algo interesante.
Podemos mantener dos colas de prioridad: pqmin y pqmax,
donde pqmin es el montón raíz pequeño y pqmax es el montón raíz grande.
Cada vez que agrega un número, el número se inserta en pqmin
cada vez que obtiene, desde el montón de pqmin Saca un número y dale salida, y luego inserta este número en pqmax.Mantenga
que cada elemento en pqmax es menor o igual que pqmin, es decir, después de que cada elemento se inserta en pqmin, compare los elementos superiores de pqmax y pqmin. Si el elemento superior del montón pqmax es mayor que el elemento superior del montón pqmin, el elemento en la parte superior del montón pqmin se inserta en pqmax y el elemento en la parte superior del montón pqmax se inserta en pqmin.
Mantener el número de elementos en pqmax es constante en i,
entonces el elemento i-ésimo + 1 valor mínimo debe ser el máximo de pqmin

Código de CA (tenga en cuenta que juzgué si las condiciones anteriores no se cumplen antes de presionar pqmin y lo presioné en pqmax por adelantado)

#include <bits/stdc++.h>

using namespace std;
const int MAXN = 200010;

int lists[MAXN];

priority_queue<int, vector<int>, greater<int>> pqmin;

priority_queue<int> pqmax;

int main()
{
    
    
#ifdef ACM_LOCAL
    freopen("./in.txt", "r", stdin);
    freopen("./out.txt", "w", stdout);
#endif
    ios::sync_with_stdio(false);
    int m, n;
    cin >> m >> n;
    for (int i = 0; i < m; i++)
    {
    
    
        cin >> lists[i];
    }
    int cur = 0;
    for (int i = 0; i < n; i++)
    {
    
    
        int temp;
        cin >> temp;
        while (cur < temp)
        {
    
    
            if (!pqmax.empty() && lists[cur] < pqmax.top())
            {
    
    
                pqmin.push(pqmax.top());
                pqmax.pop();
                pqmax.push(lists[cur]);
            }
            else
            {
    
    
                pqmin.push(lists[cur]);
            }
            cur++;
        }
        cout << pqmin.top() << endl;
        pqmax.push(pqmin.top());
        pqmin.pop();
    }
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/m0_43448982/article/details/95654963
Recomendado
Clasificación