
1번째 시도 : 시간초과 O(QN^2)
2번째 시도 : 시간초과 O(QN)

3번째 시도 : 메모리 초과
prefix_sum 을 구하는 과정에서 부터 O(N^2)으로 시간초과가 발생하며 배열의 범위가 10^10이 넘어가며 메모리 초과또한 발생하게 된다.
문제의 메모리 제한이 1024 MB 로 배열의 크기를 크게 선언해도 메모리 초과가 발생하지 않을 것이라 예상하고 진행했었음.

최종 풀이

import sys
n, q = map(int, sys.stdin.readline().split())
a = list(map(int, sys.stdin.readline().split()))
prefix_sum = [0] * (n+1)
for i in range(1, n+1):
prefix_sum[i] = prefix_sum[i-1] + a[i-1]
prefix_power = [0] * (n+1)
for i in range(1, n+1):
prefix_power[i] = prefix_power[i-1] + a[i-1] ** 2
for _ in range(q):
l, r = map(int, sys.stdin.readline().split())
total = ((prefix_sum[r] - prefix_sum[l-1]) ** 2) - (prefix_power[r] - prefix_power[l-1])
total = total // 2
sys.stdout.write(str(total) + '\n')