Submission #59942489


Source Code Expand

#include <bits/stdc++.h>
#include <atcoder/segtree>

#define int long long

using namespace std;
using namespace atcoder;

const int N = 2e5 + 10;
const int MOD = 998244353;
const int inv2 = 499122177;

int n, k, p[N];

int op (int a, int b) {
    if (a + b >= MOD) return a + b - MOD;
    return a + b;
}

int e() { return 0; }

int qpow (int x, int p) {
    int res = 1;
    while (p) {
        if (p % 2) res = res * x % MOD;
        x = x * x % MOD;
        p /= 2;
    }
    return res;
}

int inv(int x) {
    return qpow(x, MOD - 2);
}

signed main() {
    ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    cin >> n >> k;
    for (int i = 0; i < n; i++) {
        cin >> p[i];
        p[i]--;
    }
    int bas = 0;
    {segtree<int, op, e> seg(n);
    for (int i = 0; i < n; i++) {
        bas += seg.prod(p[i], n);
        seg.set(p[i], 1);
    }}
    int res = 0, sub = 0, add = (k * (k - 1) / 2LL) % MOD;
    add = add * inv2 % MOD;
    segtree<int, op, e> seg(n);
    for (int i = 0; i < k; i++) {
        (sub += seg.prod(p[i], n)) %= MOD;
        seg.set(p[i], 1);
    }
    for (int i = k; i <= n; i++) {
        int cur = (MOD + bas + add - sub) % MOD;
        (res += cur) %= MOD;
        if (i == n) break;
        seg.set(p[i - k], 0);
        (sub += (MOD - seg.prod(0, p[i - k]))) %= MOD;
        (sub += seg.prod(p[i], n)) %= MOD;
        seg.set(p[i], 1);
    }
    (res *= inv(n - k + 1)) %= MOD;
    cout << res << endl;
    return 0;
}

Submission Info

Submission Time
Task G - Another Shuffle Window
User jpy_cpp
Language C++ 20 (gcc 12.2)
Score 575
Code Size 1536 Byte
Status AC
Exec Time 91 ms
Memory 10736 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 575 / 575
Status
AC × 3
AC × 30
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt
All sample_01.txt, sample_02.txt, sample_03.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt
Case Name Status Exec Time Memory
sample_01.txt AC 1 ms 3524 KiB
sample_02.txt AC 1 ms 3404 KiB
sample_03.txt AC 1 ms 3412 KiB
test_01.txt AC 1 ms 3492 KiB
test_02.txt AC 1 ms 3496 KiB
test_03.txt AC 1 ms 3492 KiB
test_04.txt AC 1 ms 3424 KiB
test_05.txt AC 1 ms 3436 KiB
test_06.txt AC 70 ms 10640 KiB
test_07.txt AC 60 ms 10648 KiB
test_08.txt AC 50 ms 10676 KiB
test_09.txt AC 68 ms 10588 KiB
test_10.txt AC 60 ms 10700 KiB
test_11.txt AC 51 ms 10532 KiB
test_12.txt AC 63 ms 10424 KiB
test_13.txt AC 80 ms 10564 KiB
test_14.txt AC 22 ms 6504 KiB
test_15.txt AC 9 ms 4492 KiB
test_16.txt AC 49 ms 7536 KiB
test_17.txt AC 10 ms 4976 KiB
test_18.txt AC 59 ms 9956 KiB
test_19.txt AC 69 ms 10496 KiB
test_20.txt AC 86 ms 10712 KiB
test_21.txt AC 66 ms 10660 KiB
test_22.txt AC 69 ms 10600 KiB
test_23.txt AC 84 ms 10736 KiB
test_24.txt AC 91 ms 10624 KiB
test_25.txt AC 61 ms 10724 KiB
test_26.txt AC 74 ms 10692 KiB
test_27.txt AC 74 ms 10644 KiB