ABC378E树状数组求助
查看原帖
ABC378E树状数组求助
1201076
senak楼主2024/11/4 12:50
#include<iostream>
#include<vector>
#define int long long
using namespace std;
const int N = 2e5 + 7;
int Fenwick[N]; int n, m;
int lowbit(int x) {
	return x & -x;
}
void add(int x, int k) {
	while (x <= m&&x!=0) {
		Fenwick[x] += k;
		x += lowbit(x);
	}
}
int sum(int x) {
	int t = 0;
	while (x) {
		t += Fenwick[x];
		x -= lowbit(x);
	}
	return t;
}
signed main() {
	cin >> n >> m;
	vector<int>a(n + 1), s(n + 1); int ans = 0;
	for (int i = 1; i <= n; i++) {
		cin >> a[i]; s[i] = s[i - 1] + a[i]; s[i] %= m;
	}
	int sl_1 = 0;
	for (int r = 1; r <= n; r++) {
		ans += s[r] * r - sl_1;
		//int x = r - 1 - sum(s[r]);WA
		int x = sum(m) - sum(s[r]);//AC
		ans += x * m;
		sl_1 += s[r]; add(s[r], 1);
	}cout << ans << endl;
	return 0;
}

为什么上面一个WA一个AC,难道不应该等价吗?求大佬解答!

2024/11/4 12:50
加载中...