why WA 20pts,其他多倍经验题可以 AC
查看原帖
why WA 20pts,其他多倍经验题可以 AC
726862
zhanglh楼主2024/7/11 13:05

由于是多倍经验题,把 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;
}
2024/7/11 13:05
加载中...