Preguntas G: completa pesos binario
Tiempo límite: límite de memoria 1.0s: 256.0MB a cabo esta pregunta: 20 minutos
[Problemas] Descripción
Dadas nodos N que comprenden un árbol binario completo , cada nodo del árbol tiene un peso en orden desde la
parte superior a la inferior, de izquierda a derecha, seguido de un 1, un 2, ··· AN , como se muestra a continuación:
En este momento los nodos de la misma profundidad Xiao Ming ponen valores juntos, lo que quería saber qué nodo profundidad de
la suma ponderada y el máximo? Si usted tiene más peso y profundidad con la máxima, profundidad mínima de salida que ellos.
Nota: la profundidad de la raíz es 1.
[Formato de entrada
de la primera fila contiene un número entero N.
La segunda línea contiene N enteros A 1, A 2, ··· AN .
[] Formato de salida
de salida representativa de una respuesta entero.
[] De entrada de muestra
. 7
. 1. 6. 5. 4. 3. 1 2
[Salida] Muestra
2
[Evaluación] y convenciones usadas en el Ejemplo escala
para la evaluación de todos los casos de uso, 1 ≤ N ≤ 100000, -100.000 ≤ A i ≤ 100000.
análisis
① porque el tema que es un árbol binario completo, que puede ser almacenado con el subíndice fin, prestar atención 1 desde el principio;
② de dos ciclos calcular pesos de cada nodo, para registrar la máxima;
. 1 #include <bits / STDC ++ H.> 2 el uso de espacio de nombres STD; . 3 const int MAXN = 1,000 ; . 4 int main () { . 5 int A [MAXN], C [ 21 es ] = { 0 }; // A para secuencialmente árboles de almacenamiento peso, c para el valor de profundidad derecho correspondiente al árbol de almacenado 6. int n-; // K es la profundidad 7. Scanf ( " % D " , y n-); . 8 para ( int I = 1. ; I <= n-; I ++ ) { 9. Scanf ( " % D ", & a [i]); 10 } 11 c [ 1 ] = a [ 1 ]; // 第一层单独处理 12 int k = 2 ; 13 int ans = 1 ; 14 para ( int i = 2 ; i <= n; i = i + pow ( 2 , k- 2 )) { 15 para ( int j = i; (j <i + pow ( 2 , k- 1 )) && (j <= n); j ++ ) { 16 c [k] + = a [j]; 17 } 18 si(c [k]> c [k- 1 ]) ans = k; 19 k ++ ; 20 } 21 cout << c [ 4 ] << endl; 22 printf ( " % d " , ANS); 23 }