tema
Dada una secuencia creciente S de N números enteros, la mediana es el número en la posición media. Por ejemplo, la mediana de S1 = {11, 12, 13, 14} es 12 y la mediana de S2 = {9, 10, 15, 16, 17} es 15. La mediana de dos secuencias se define como la mediana de la secuencia no decreciente que contiene todos los elementos de ambas secuencias. Por ejemplo, la mediana de S1 y S2 es 13.
Dadas dos secuencias crecientes de números enteros, se le pide que encuentre su mediana.
Especificación de entrada:
Cada archivo de entrada contiene un caso de prueba. Cada caso ocupa 2 líneas, cada uno da la información de una secuencia. Para cada secuencia, el primer entero positivo N (≤ 2 × 1 0 5 2 \ times10 ^ {5}2×1 05 ) es el tamaño de esa secuencia. Luego siguen N números enteros, separados por un espacio. Se garantiza que todos los números enteros están en el rango de int largo.
Especificación de salida:
Para cada caso de prueba, debe generar la mediana de las dos secuencias dadas en una línea.
Entrada de muestra:
4 11 12 13 14
5 9 10 15 16 17
Salida de muestra:
13
Código
Lo más temido de este problema es que es complicado y se puede solucionar con sort.
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(long int a,long int b)
{
return a <= b;
}
int main()
{
long int n1,n2;
cin >> n1;
long int l[400000];
for(long int i = 0;i < n1;i++)
cin >> l[i];
cin >> n2;
for(long int i = 0;i < n2;i++)
cin >> l[n1+i];
sort(l,l+n1+n2,cmp);
long int m = (n1+n2)/2;
if((n1+n2)%2 == 0)
m--;
cout << l[m];
}