Luo Gu tema Enlace: secuencia de fusión
título Descripción
Hay dos longitud N secuencias A y B, que representa a un número añadido a la A y B puede ser N 2 meses y, esta demanda N 2 dos y el más pequeño de la N.
Formatos de entrada y de salida
Formatos de entrada:
La primera línea de un número entero positivo N;
La segunda fila de la N números enteros A I , satisfacer una I ≤A I + 1. Y A I ≦ 10 9. ;
La tercera fila de la N números enteros B I , satisfaciendo B I ≦ B I. + 1 y B I ≦ 10 . 9 .
[Datos] escala
Para 50% de los datos, satisface 1 <= N <= 1000;
A 100% de los datos, satisface 1 <= N <= 100000.
Los formatos de salida:
Sólo la línea de salida, que comprende N enteros, de pequeño a grande de la salida separado por un espacio entre los números adyacentes más pequeños N y.
entrada y salida de la muestra
Ejemplo de entrada # 1:
3
2 6 6
1 4 8
Muestra de salida # 1:
3 6 7
Un tema Italia: dos en longitudmonótonamente creciente secuencia puede estar compuesta de n n 2 combinaciones, combinaciones de éstos Q n antes de la mayor número.
solución:
Primer vistazo a la siguiente tabla:
A [1] + B [1] <= A [1] + B [2] <= ... <= A [1] + B [N]
A [2] + B [1] <= A [2] + B [2] <= ... <= A [2] + B [N]
......
A [N] + B [1] <= A [N] + B [2] <= ... <= A [N] + B [N]
Obviamente, en la misma columna, el valor de cada fila es mayor que la línea superior.
Por lo tanto, podemos primero A 1 ~A n- y B . 1 valores se añaden a la pila, en cada caso tomando el montón mínimo, pila puso en la siguiente fila se añade, esto se puede garantizar monotónica.
1 #include <bits / STDC ++ h.> 2 usando espacio de nombres std; 3 const int N = 100 000 + 5 ; 4 5 int n, a [N], b [N], ans [N]; 6 7 struct número { 8 int id1, id2, val; 9 bool operador <( const número y a) const { 10 retorno val> a.val; 11 } 12 }; 13 14 priority_queue <número> h; 15 16 int main () { 17 ios :: sync_with_stdio ( falso ); 18 cin >> n; 19 para ( int i = 1 ; i <= n; i ++) cin >> a [i]; 20 para ( int i = 1 ; i <= n; i ++) cin >> b [i]; 21 para ( int i = 1 ; i <= n; i ++) h.push ((número) {i, 1 , a [i] + b [ 1 ]}); 22 para ( int i = 1 ; i <= n; i ++ ) { 23 número superior = h.top (); h.pop (); 24 ans [i] = top.val; 25 h.push ((número) {top.id1, top.id2 + 1 , un [top.id1] + b [top.id2 + 1 ]}); 26 } 27 para ( int i = 1 ; i <= n; i ++) tribunal << ans [i] << ' ' ; tribunal << endl; 28 de retorno 0 ; 29 }
-