第一行输入两个整数
,分别表示序列长度与查询数量。
第二行输入
个整数
,表示序列元素。
此后
行,第
行输入两个整数
,表示一次查询的左右端点。
输出一行
个用空格隔开的整数,第
个整数为第
次查询的答案。
5 3 1 2 3 4 5 1 2 1 3 2 5
2 6 120
区间的乘积为
;
的乘积为
;
的乘积为
。
from functools import cache
from itertools import accumulate
MOD = int(1e9 + 7)
n, q = map(int, input().split())
arr = list(map(int, input().split()))
pre = list(accumulate(arr, lambda a, b: a * b % MOD))
pre.append(1)
@cache
def inverse(x):
return pow(x, MOD - 2, MOD)
def divide(a, b):
return a * inverse(b) % MOD
ans = []
for _ in range(q):
l, r = map(int, input().split())
ans.append(divide(pre[r - 1], pre[l - 2]))
print(' '.join(str(x) for x in ans))