题目:
小猴有一个 n 长数列 a^b1,...,a^bn, 现在他有 q 个询问:区间 l(L),r 中项的乘积是多少?即:
a^bl×...×a^br
举个例子,假设 a=2,数列为 2^3, 2^7, 2^1, 2^0, 2^2, 那么区间 [2,4]中项的乘积为:2^7 ×2^1 ×2^0 =256
请你依次计算小猴的询问。
输入格式
第一行三个正整数 n,a,q。
第二行 n 个非负整数 b1,...,bn 。
接下来 q 行,每行两个正整数 l,r。
输出格式
q 行,每行一个整数表示结果,结果可能过大,请对 10^9+7 取模。
样例
输入
5 2 3
3 7 1 0 2
2 4
1 2
3 5
输出
256
1024
8
我的代码:\
#include <iostream>
using namespace std;
typedef long long LL;
const LL MOD = 1e9+7;
LL qpow(LL a,LL b,LL p){
LL c=1;
while(b){
if(b&1)c=c*a%p;
b/=2;
a=a*a%p;
}
return c;
}
LL n,a,q;
LL b,ans[100010];
int main(){
cin>>n>>a>>q;
for(int i=1;i<=n;i++){
cin>>b;
ans[i]=qpow(a,b,MOD);
}
while(q--){
LL l,r;
cin>>l>>r;
LL mul=1;
for(int i=l;i<=r;i++){
mul*=ans[i];
mul%=MOD;
}
cout<<mul<<endl;
}
return 0;
}
70分(只有AC和TLE),求教!!!