Submission #2694453


Source Code Expand

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const ll M = 1e9 + 7;
const int N = 100100;

ll s[N * 4], f[N * 4], lf[N * 4], d[N * 4], ld[N * 4];

void push(int n, int a, int b) {
    if (lf[n] || ld[n]) {
        ll sz = (b - a + 1) / 2;
        f[n * 2] += lf[n];
        f[n * 2 + 1] += lf[n] + ld[n] * sz;
        d[n * 2] += ld[n];
        d[n * 2 + 1] += ld[n];
        s[n * 2] += lf[n] * sz + ld[n] * sz * (sz - 1) / 2;
        s[n * 2 + 1] += (lf[n] + ld[n] * sz) * sz + ld[n] * sz * (sz - 1) / 2;
        lf[n * 2] += lf[n];
        lf[n * 2 + 1] += lf[n] + ld[n] * sz;
        ld[n * 2] += ld[n];
        ld[n * 2 + 1] += ld[n];
        lf[n] = ld[n] = 0;
    }
}

ll query(int l, int r, int n = 1, int a = 1, int b = N) {
    if (a > r || b < l) {
        return 0;
    }
    if (a >= l && b <= r) {
        return s[n];
    }
    push(n, a, b);
    int mid = (a + b) / 2;
    return query(l, r, n * 2, a, mid) + query(l, r, n * 2 + 1, mid + 1, b);
}

void update(int l, int r, int k = 1, int e = 1, int n = 1, int a = 1, int b = N) {
    if (a >= l && b <= r) {
        f[n] += k;
        d[n] += e;
        lf[n] += k;
        ld[n] += e;
        ll sz = b - a + 1;
        s[n] += k * sz + e * sz * (sz - 1) / 2;
        return;
    }
    push(n, a, b);
    int mid = (a + b) / 2;
    if (l <= mid) {
        update(l, min(mid, r), k, e, n * 2, a, mid);
    }
    if (r > mid) {
        update(max(mid + 1, l), r, k + e * max(mid - l + 1, 0), e, n * 2 + 1, mid + 1, b);
    }
    s[n] = s[n * 2] + s[n * 2 + 1];
}


int main() {
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n, m;
    cin >> n >> m;
    vector<ll> a(n);
    for (int i = 0; i < n; ++i) {
        cin >> a[i];
        if (i && a[i] < a[i - 1]) {
            ll t = (a[i - 1] - a[i] + m - 1) / m;
            a[i] += t * m;
        }
    }
    ll s = a[n - 1] - a[0];
    for (int i = 0; i + 1 < n; ++i) {
        if (a[i + 1] - a[i] < 2) {
            continue;
        }
        ll l = (a[i] + 2) % m;
        ll r = (a[i + 1]) % m;
        if (!l) {
            l += m;
        }
        if (!r) {
            r += m;
        }
        if (l > r) {
            update(l, m);
            update(1, r, m - l + 2);
        } else {
            update(l, r);
        }
    }
    ll ans = s;
    for (int i = 1; i <= m; ++i) {
        ans = min(ans, s - query(i, i));
    }
    cout << ans;
    return 0;
}

Submission Info

Submission Time
Task E - guruguru
User meatrow
Language C++14 (GCC 5.4.1)
Score 0
Code Size 2623 Byte
Status WA
Exec Time 96 ms
Memory 15616 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 700
Status
AC × 2
AC × 8
WA × 14
Set Name Test Cases
Sample sample1.txt, sample2.txt
All half0.txt, half1.txt, half2.txt, half3.txt, half4.txt, min_m.txt, min_n.txt, mx0.txt, mx1.txt, mx2.txt, rnd0.txt, rnd1.txt, rnd2.txt, rnd3.txt, rnd4.txt, rnd5.txt, rnd6.txt, rnd7.txt, rnd8.txt, rnd9.txt, sample1.txt, sample2.txt
Case Name Status Exec Time Memory
half0.txt AC 28 ms 13952 KB
half1.txt AC 25 ms 14848 KB
half2.txt AC 44 ms 14464 KB
half3.txt WA 57 ms 14080 KB
half4.txt AC 71 ms 15104 KB
min_m.txt AC 1 ms 256 KB
min_n.txt WA 19 ms 13824 KB
mx0.txt WA 95 ms 15616 KB
mx1.txt WA 96 ms 15616 KB
mx2.txt WA 96 ms 15616 KB
rnd0.txt WA 8 ms 13056 KB
rnd1.txt WA 4 ms 12672 KB
rnd2.txt WA 9 ms 12928 KB
rnd3.txt WA 17 ms 12928 KB
rnd4.txt WA 45 ms 13184 KB
rnd5.txt AC 4 ms 12544 KB
rnd6.txt WA 3 ms 12544 KB
rnd7.txt WA 8 ms 13056 KB
rnd8.txt WA 9 ms 12800 KB
rnd9.txt WA 5 ms 12800 KB
sample1.txt AC 3 ms 12544 KB
sample2.txt AC 4 ms 12544 KB