Enlace
significado de problemas:
dada una longitud de secuencia es un número impar, la salida de la antigua \ (1,3,5, \ dots \) en la mediana del número de
las ideas:
Superior de la pila
El establecimiento de un pequeño montón de raíz y la pila raíz grande
- Si la corriente es mayor que el número de pedazos más pequeños de la parte superior de la raíz, la raíz inserte una pequeña pila
- Si la corriente es menor que el número de pedazos más pequeños de la parte superior de la raíz, la raíz inserta en el gran reactor
Grandes montones de raíz superior es siempre inferior a la parte superior de unos pequeños montones de raíz
Cuando un número impar que se ha insertado, debemos asegurarnos de que el número de gran montón de raíz menor que el número de una pila de raicillas
- Si un gran número de múltiples raíz del montón, puso gran raíz pilas de lixiviación superior inserto raicillas
- Si un pequeño número de múltiples pila raíz, poner la tapa de las pilas insertadas en las grandes raicillas raíz del montón
Tan pequeño es el montones de raíz media superior
código:
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define fi first
#define se second
typedef long long ll;
typedef pair<int,int> pii;
//head
int a[10000];
priority_queue<int,vector<int>,greater<int> >q1;
priority_queue<int>q2;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int T;
cin>>T;
while(T--) {
int t,n;
cin>>t>>n;
while(q1.size()) q1.pop();
while(q2.size()) q2.pop();
for(int i=1;i<=n;i++) cin>>a[i];
cout<<t<<" "<<(n+1)/2<<endl;
for(int i=1;i<=n;i++) {
if(!q1.size()||a[i]>q1.top()) q1.push(a[i]);
else q2.push(a[i]);
if(i&1) {
if(q1.size()-1>q2.size()) q2.push(q1.top()),q1.pop();
if(q2.size()+1>q1.size()) q1.push(q2.top()),q2.pop();
}
if(i&1) cout<<q1.top()<<" ";
if(i%20==0||i==n) cout<<endl;
}
}
return 0;
}