萌新求助线段树 WA 0pts 错误答案都输出 0
查看原帖
萌新求助线段树 WA 0pts 错误答案都输出 0
560516
喵仔牛奶楼主2023/1/28 12:57

如题,萌新的错误答案都输出了 00

测评记录: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;
}
2023/1/28 12:57
加载中...