ARC 137

A. Coprime Pair

https://atcoder.jp/contests/arc137/tasks/arc137_a

B. Count 1’s

https://atcoder.jp/contests/arc137/tasks/arc137_b

自力 AC

template <typename T>
vector<pair<T, int>> runLengthEncode(const vector<T>& input) {
    vector<pair<T, int>> encoded;
    int size = input.size();
    for (int i = 0; i < size; ++i) {
        int count = 1;
        while (i + 1 < size && input[i] == input[i + 1]) {
            ++i;
            ++count;
        }
        encoded.emplace_back(input[i], count);
    }
    return encoded;
}

void solve() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    int N;
    cin >> N;
    vint A(N);
    rep(i, N) cin >> A[i];

    auto ps = runLengthEncode(A);
    if (ps.size() == 1) {
        cout << N + 1 << endl;
        return;
    }

    int m = ps.size();

    int mone = 0, pone = 0;
    bool is_init_one = ps[0].first == 1;
    int s0 = 0, s1 = 1;
    if (is_init_one) swap(s0, s1);
    int sum0 = 0;
    for (int i = s0; i < m; i += 2) {
        sum0 += ps[i].second;
        chmax(pone, sum0);
        if (i + 1 < m) {
            sum0 -= ps[i + 1].second;
            if (sum0 < 0) sum0 = 0;
        }
    }
    int sum1 = 0;
    for (int i = s1; i < m; i += 2) {
        sum1 += ps[i].second;
        chmax(mone, sum1);
        if (i + 1 < m) {
            sum1 -= ps[i + 1].second;
            if (sum1 < 0) sum1 = 0;
        }
    }

    int cnt_one = accumulate(all(A), 0);
    int r = cnt_one + pone;
    int l = cnt_one - mone;
    cout << r - l + 1 << endl;
}

C. Distinct Numbers

https://atcoder.jp/contests/arc137/tasks/arc137_c

D. Prefix XORs

https://atcoder.jp/contests/arc137/tasks/arc137_d

E. Bakery

https://atcoder.jp/contests/arc137/tasks/arc137_e

F. Overlaps

https://atcoder.jp/contests/arc137/tasks/arc137_f