| 比赛 |
20251022赛前模拟1 |
评测结果 |
WWWWWWAAAA |
| 题目名称 |
学姐的巧克力盒 |
最终得分 |
40 |
| 用户昵称 |
淮淮清子 |
运行时间 |
4.245 s |
| 代码语言 |
C++ |
内存使用 |
7.87 MiB |
| 提交时间 |
2025-10-22 11:35:08 |
显示代码纯文本
#include<iostream>
using namespace std;
#define ll long long
const int MAXN = 1e6 + 5;
int n, m, k, p1, p2, phi;
int a[MAXN], pre1[MAXN], pre2[MAXN];
bool o[MAXN];
ll qpow(ll b, ll e, ll mod){
ll res = 1;
for(b %= mod;e;e >>= 1, b = b * b % mod)
if(e & 1) res = res * b % mod;
return res;
}
int exgcd(int a, int b, int &x, int &y){
if(!b){x = 1; y = 0; return a;}
int g = exgcd(b, a % b, y, x);
y -= a / b * x;
return g;
}
int inv(int x, int mod){
int x0, y0;
int g = exgcd(x, mod, x0, y0);
if(g != 1) return 0;
return (x0 % mod + mod) % mod;
}
int euler(int x){
int res = x;
for(int i = 2; i * i <= x;i ++){
if(x % i == 0){
res = res / i * (i - 1);
while(x % i == 0) x /= i;
}
}
if(x > 1) res = res / x * (x - 1);
return res;
}
int main(){
freopen("chocolatebox.in", "r", stdin);
freopen("chocolatebox.out", "w", stdout);
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m >> k >> p1 >> p2;
for(int i = 1;i <= n;i ++) cin >> a[i];
if(p1){
pre1[0] = 1;
for(int i = 1;i <= n;i ++){
pre1[i] = 1LL * pre1[i - 1] * a[i] % p1;
}
}
if(p2){
phi = euler(p2);
pre2[0] = 1; o[0] = 0;
for(int i = 1;i <= n;i ++){
ll t = 1LL * pre2[i - 1] * a[i];
o[i] = o[i - 1] || (t >= phi);
pre2[i] = t % phi;
}
}
while(m --){
int op, l, r; cin >> op >> l >> r;
if(op == 1 && p1){
cout << 1LL * pre1[r] * inv(pre1[l - 1], p1) % p1 << '\n';
}
else if (op == 2 && p2){
int e = 1LL * pre2[r] * inv(pre2[l - 1], phi) % phi;
if(!o[l - 1]){
ll t = 1LL * pre2[r] * inv(pre2[l - 1], phi);
if(t < phi) o[r] = 0;
}
ll exp = o[r] ? (e + phi) : e;
cout << qpow(k, exp, p2) << '\n';
}
}
return 0;
}