如题,萌新的错误答案都输出了 0。
测评记录:https://www.luogu.com.cn/record/100660118
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5, V = 105;
struct node {
int p[V];
node() { for (int i = 0; i <= 100; i ++) p[i] = i; }
void operator += (const node& x) { for (int i = 0; i <= 100; i ++) p[i] = x.p[p[i]]; }
} tag[N << 1];
int n, q, opt, l, r, k, c, p, cnt, a[N], f[V][V][V], Ls[N << 1], Rs[N << 1];
inline int ls(int p) { return Ls[p] ? Ls[p] : Ls[p] = ++ cnt; }
inline int rs(int p) { return Rs[p] ? Rs[p] : Rs[p] = ++ cnt; }
inline void push_down(int p) { tag[ls(p)] += tag[p], tag[rs(p)] += tag[p], tag[p] = node(); }
void modify(int p, int l, int r, int nl, int nr, node k) {
if (nl <= l && r <= nr) { tag[p] += k; return; }
push_down(p);
int mid = (l + r) >> 1;
if (nl <= mid) modify(ls(p), l, mid, nl, nr, k);
if (nr > mid) modify(rs(p), mid + 1, r, nl, nr, k);
}
void print(int p, int l, int r) {
if (l == r) { cout << tag[p].p[a[l]] << ' '; return; }
int mid = (l + r) >> 1;
push_down(p), print(ls(p), l, mid), print(rs(p), mid + 1, r);
}
int main() {
cin >> n >> q, cnt = 1;
for (int i = 1; i <= n; i ++) cin >> a[i];
for (int i = 1; i <= 100; i ++) {
f[1][1][i] = f[2][1][i] = 1;
for (int j = 3; j <= 100; j ++)
f[j][1][i] = (f[j - 1][1][i] + f[j - 2][1][i]) % i;
}
for (int i = 1; i <= 100; i ++)
for (int j = 2; j <= 100; j ++)
for (int k = 1; k <= 100; k ++)
f[i][j][k] = f[i][j - 1][k] * f[i][1][k] % k;
for (int i = 1; i <= q; i ++) {
node res;
cin >> l >> r >> k >> p >> c, c %= p;
for (int j = 1; j <= 100; j ++) {
res.p[j] = (f[j][k][p] + c) % p;
}
modify(1, 1, n, l, r, res);
}
print(1, 1, n);
return 0;
}