蒟蒻求教
  • 板块学术版
  • 楼主str2011
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/8/4 21:47
  • 上次更新2024/8/5 03:01:39
查看原帖
蒟蒻求教
1123159
str2011楼主2024/8/4 21:47

题目:
小猴有一个 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),求教!!!

2024/8/4 21:47
加载中...