La secuencia combinada (cola de prioridad)

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 }

 

 

 

-

Supongo que te gusta

Origin www.cnblogs.com/jiamian/p/11176494.html
Recomendado
Clasificación