由于是多倍经验题,把 AT_arc075_c 和 P2717寒假作业 的 AC 代码加上取模交过来的,为什么还会 WA 20pts?
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <map>
using namespace std;
typedef long long ll;
const ll MOD = 92084931;
int n;
ll k, s[200010], a[200010], tr[200010], c;
map<ll, ll> mp;
void get(ll x) {
if (mp.count(x)) return;
mp[x] = ++ c;
}
ll lowbit(ll x) { return x & -x; }
void update(int x, ll k) {
for (int i = x; i <= n + 1; i += lowbit(i)) tr[i] += k;
}
ll query(int x) {
ll ans = 0;
for (int i = x; i > 0; i -= lowbit(i)) ans = (ans + tr[i]) % MOD;
return ans;
}
int main() {
scanf("%d%lld", &n, &k);
for (int i = 0; i <= n; i ++ ) {
ll x;
if (i > 0) scanf("%lld", &x);
x -= k;
if (i > 0) s[i] = s[i - 1] + x;
else s[i] = x;
a[i] = s[i];
}
sort(a, a + n + 1);
for (int i = 0; i <= n; i ++ ) get(a[i]);
ll cnt = 0;
for (int i = 0; i <= n; i ++ ) {
cnt = (cnt + query(mp[s[i]])) % MOD;
update(mp[s[i]], 1);
}
printf("%lld\n", cnt);
return 0;
}