题解:蓝桥云课 3382 区间次方和

【题目来源】

蓝桥云课:1.区间次方和 - 蓝桥云课 (lanqiao.cn)

【题目描述】

给定一个长度为n的整数数组a以及m个查询。

每个查询包含三个整数l,r,k表示询问l~个之间所有元素的k次方和。

请对每个查询输出一个答案,答案对10^9+7取模。

【输入】

第一行输入两个整数n,m其含义如上所述。

第二行输入n个整数a[1],a[2],...,a[n].

接下来m行,每行输入三个整数l,r,k表示一个查询。

【输出】

输出m行,每行一个整数,表示查询的答案对10^9+7取模的结果。

【输入样例】

5 3
1 2 3 4 5
1 3 2
2 4 3
3 5 1

【输出样例】

14
99
12

【算法标签】

《蓝桥云课 3382 区间次方和》 #前缀和#

【代码详解】

#求出a的前缀和:
from itertools import accumulate
MOD = 1000000007
#求出a的前缀和:
def get_presum(a):
  sum = list(accumulate(a))
  sum = [x % MOD for x in sum]
  return sum

#快速求区间a[l]+...+a[r]之和
def get_sum(sum, l, r):
  if l==0:
    return sum[r]
  else:
    return (sum[r] - sum[l-1] + MOD) % MOD

n, m = map(int, input().split())
a = list(map(int, input().split()))

#存储a数组的前缀和、a数组平方的前缀和、...
sum_list = []
for i in range(1, 6):
  tmp_a = [x ** i for x in a]
  sum_list.append(get_presum(tmp_a))

for _ in range(m):
  l, r, k = map(int, input().split())
  print(get_sum(sum_list[k-1], l-1, r-1))

【运行结果】

5 3
1 2 3 4 5
1 3 2
14
2 4 3
99
3 5 1
12
posted @ 2026-03-04 10:52  团爸讲算法  阅读(1)  评论(0)    收藏  举报