ABC 378
Table of Contents
https://atcoder.jp/contests/abc378
A. Pairing
https://atcoder.jp/contests/abc378/tasks/abc378_a
B. Garbage Collection
https://atcoder.jp/contests/abc378/tasks/abc378_b
C. Repeating
https://atcoder.jp/contests/abc378/tasks/abc378_c
D. Count Simple Paths
https://atcoder.jp/contests/abc378/tasks/abc378_d
E. Mod Sigma Problem
https://atcoder.jp/contests/abc378/tasks/abc378_e
2026/1/23 解説 AC
void solve() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
ll N, M;
cin >> N >> M;
vll A(N);
rep(i, N) cin >> A[i];
vll cm(N + 1);
rep(i, N) {
cm[i + 1] = cm[i] + A[i];
cm[i + 1] %= M;
}
fenwick_tree<ll> freq(M), cmcm(N + 1);
rep(i, N) cmcm.add(i + 1, cm[i + 1]);
ll ans = 0;
rep2(i, 1, N + 1) {
ans += i * cm[i];
ans -= cmcm.sum(0, i);
freq.add(cm[i], 1);
ans += M * freq.sum(cm[i] + 1, M);
}
cout << ans << endl;
}
2026/2/18 解説 AC
void solve() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
ll N, M;
cin >> N >> M;
vll A(N);
rep(i, N) cin >> A[i];
vll cm(N + 1);
rep(i, N) cm[i + 1] = (cm[i] + A[i]) % M;
fenwick_tree<ll> fw(M);
ll ans = 0;
ll sum = 0;
rep(r, N + 1) {
ans += cm[r] * r - sum + fw.sum(cm[r] + 1, M) * M;
sum += cm[r];
fw.add(cm[r], 1);
}
cout << ans << endl;
}
F. Add One Edge 2
https://atcoder.jp/contests/abc378/tasks/abc378_f