#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 = sum(m) - sum(s[r]);
ans += x * m;
sl_1 += s[r]; add(s[r], 1);
}cout << ans << endl;
return 0;
}
为什么上面一个WA一个AC,难道不应该等价吗?求大佬解答!