Las sumas de prefijos resultan muy útiles al trabajar con rangos dentro de un arreglo. En muchos casos, es posible optimizar los programas reemplazando el cálculo repetitivo de sumas por el uso de una suma de prefijos.
Imagina un problema en el que se deben responder muchas consultas (millones) del tipo: “¿Cuál es la suma de los elementos del arreglo a desde el inicio hasta ?”. Una solución ingenua sería calcular la suma a[0] + a[1] + a[2] + ... + a[] en cada consulta. Por ejemplo, si tenemos un arreglo y las siguientes consultas:
Observa que la primera parte del cálculo se repite siempre. Antes de calcular res2, ya conocemos el resultado de a[0] + a[1] + a[2] + a[3] (que es res1). Antes de calcular res4, también sabemos la suma de a[0] + a[1] + a[2] + a[3] + a[4] + a[5]. Podemos aprovechar estas repeticiones y responder cada consulta de manera instantánea en lugar de ejecutar un ciclo for en cada ocasión.
Para ello, crearemos un nuevo arreglo p de sumas de prefijos, donde los elementos de p representen la suma de los elementos en el arreglo original a hasta cada índice. De esta forma, la respuesta a cada consulta será simplemente acceder a un elemento de la suma de prefijos:
Observa el patrón: para calcular el siguiente elemento en el arreglo de sumas de prefijos p, repetimos todo lo que ya teníamos y agregamos un elemento más de a. Así, podemos aprovechar los cálculos previos y evitar sumar los mismos números una y otra vez:
Esto puede hacerse con un único ciclo for en tiempo lineal, en vez de múltiples ciclos que repitan la misma operación una y otra vez. Después de calcular el arreglo de sumas de prefijos p, podremos responder todas las consultas al instante, pues p[i] contiene la suma a[0] + a[1] + a[2] + ... + a[i]. Por lo tanto, para cada consulta , la respuesta será simplemente p[].
¿Podrías calcular ahora el arreglo de sumas de prefijos?
Entrada
La primera línea de la entrada contiene un único entero n (1 ≤ n ≤ ). La segunda línea de la entrada contiene n enteros separados por espacios que representan el arreglo a.
Salida
El programa debe imprimir el arreglo de sumas de prefijos de a.