Ordenar ---------- mediana dinámico

Secuencialmente leer una secuencia de números enteros, cada vez que el número de enteros que se ha leído es impar, el resultado de la lectura mediana en la secuencia de números enteros.
Formato de entrada
de la primera línea de un PP entero de entrada, el número de conjuntos de datos representativos de la espalda, seguido de un número de líneas de cada conjunto de datos de entrada.
La primera línea de cada primeros datos de entrada conjunto representativo de un número entero de conjuntos de datos.
A continuación, introduzca un número entero MM, representa el conjunto de datos que contienen el número, el MM siempre un número impar, los datos separados por espacios.
El conjunto de datos de línea restante se compone de conjuntos de datos, cada fila contiene 10 de datos, la cantidad de datos puede ser menos de la última línea 10, separado por los datos de espacios.
Formato de salida
Para cada conjunto de datos, la primera salida de línea de dos números enteros, que representa el número de conjuntos de datos y el número de bits de salida (debe añadirse a la mitad de una serie de datos), con espacios entre los datos separada.
El conjunto de datos de línea restante consiste en la salida de mediana para cada fila contiene 10 de datos, la cantidad de datos puede ser menos de la última línea 10, separado por los datos de espacios.
No debe haber líneas en blanco en la salida.
Rango de datos
1≤P≤10001≤P≤1000,

1≤M≤99991≤M≤9999
muestra de entrada:
. 3
. 1. 9
. 1 2. 6. 7. 8. 5. 4. 3. 9
2. 9
. 9. 5. 4. 3. 6. 7. 8 2. 1
. 3 23 es
23 es 41 es 13 es 22-324-31-11-- -7. 8
. 5103211-311-45 -67-73-81-99 3
-33 24 56 es

Muestra de la salida:
. 1. 5
. 1 2. 4. 5. 3
2. 5
. 9. 8. 7. 5. 6
. 3 12 es
23 es 232222133553 a 3
-7 -3

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
int main(){
 int T;
 scanf("%d", &T);
 while(T --){
  int n, m;
  scanf("%d%d", &m, &n);
  printf("%d %d\n", m, (n + 1) / 2);
    priority_queue <int> down;
  priority_queue <int, vector<int>, greater<int>> up;
    int cnt = 0;
  for (int i = 1; i <= n; i ++){
   int x;
   scanf("%d", &x);
   if (down.empty() || x <= down.top())   down.push(x);
   else       up.push(x);
   if (down.size() > up.size() + 1)  up.push(down.top()), down.pop();
   if (up.size() > down.size())      down.push(up.top()), up.pop();
   if (i % 2){
    printf("%d ", down.top());
    if (++ cnt % 10 == 0)    puts("");
   }    
  }
  if (cnt % 10)   puts("");
 }
  return 0;
}
Publicados 106 artículos originales · ganado elogios 67 · vistas 5438

Supongo que te gusta

Origin blog.csdn.net/qq_45772483/article/details/104764970
Recomendado
Clasificación