比赛 |
NOIP模拟赛by mzx Day2 |
评测结果 |
AWAWAWTTTT |
题目名称 |
学姐的巧克力盒 |
最终得分 |
30 |
用户昵称 |
Rapiz |
运行时间 |
11.519 s |
代码语言 |
C++ |
内存使用 |
65.14 MiB |
提交时间 |
2016-10-20 21:55:43 |
显示代码纯文本
#include<cstdio>
#define lch (o<<1)
#define rch ((o<<1)+1)
#define mid ((l+r)>>1)
#define file(x) "chocolatebox."#x
typedef long long ll;
const int MAXN=1e6+10;
ll a[2][MAXN<<2];
int n,m,k,p[2],ra[MAXN];
void build(int o,int l,int r){
if(l==r) {
a[0][o]=ra[l]%p[0];
a[1][o]=ra[l]%p[1];
return ;
}
build(lch,l,mid),build(rch,mid+1,r);
a[0][o]=a[0][lch]*a[0][rch]%p[0];
a[1][o]=a[1][lch]*a[1][rch]%p[1];
}
int q1,q2,qt;
ll qmult(int o,int l,int r){
if(q1<=l&&r<=q2) return a[qt][o];
ll ret=1;
if(q1<=mid) ret=ret*qmult(lch,l,mid)%p[qt];
if(q2>=mid+1) ret=ret*qmult(rch,mid+1,r)%p[qt];
return ret;
}
ll qpow(ll f,ll r){
ll ret=1;
p[1]++;
f%=p[1];
while(r){
if(r&1) ret=ret*f%p[1];
f=f*f%p[1],r>>=1;
}
p[1]--;
return ret;
}
int main(){
freopen(file(in),"r",stdin);
freopen(file(out),"w",stdout);
scanf("%d%d%d%d%d",&n,&m,&k,&p[0],&p[1]);
if(!p[0]) p[0]=2;
if(!p[1]) p[1]=2;
else p[1]--;
for(int i=1;i<=n;i++) scanf("%d",&ra[i]);
build(1,1,n);
for(int i=1;i<=m;i++){
scanf("%d%d%d",&qt,&q1,&q2);
qt--;
if(qt==0) printf("%lld",qmult(1,1,n));
else {
printf("%lld",qpow(k,qmult(1,1,n)));
}
printf("\n");
}
}