ABC 338

A. Capitalized?

https://atcoder.jp/contests/abc338/tasks/abc338_a

B. Frequency

https://atcoder.jp/contests/abc338/tasks/abc338_b

C. Leftover Recipes

https://atcoder.jp/contests/abc338/tasks/abc338_c

D. Island Tour

https://atcoder.jp/contests/abc338/tasks/abc338_d

解説 AC

void solve() {
    ll n, m;
    cin >> n >> m;
    vll x(m);
    rep(i, m) {
        cin >> x[i];
        x[i]--;
    }

    vll cumsum(n * 2 + 1, 0);

    rep(i, m - 1) {
        ll mi = min(x[i], x[i + 1]);
        ll mx = max(x[i], x[i + 1]);

        ll dr = mx - mi;
        ll dl = n - dr;
        cumsum[mi] += dl;
        cumsum[mx] -= dl;
        cumsum[0] += dr;
        cumsum[mi] -= dr;
        cumsum[mx] += dr;
        cumsum[n] -= dr;
    }

    rep(i, n * 2) cumsum[i + 1] += cumsum[i];

    ll ans = INF;
    rep(i, n) chmin(ans, cumsum[i]);
    cout << ans << endl;
}

E. Chords

https://atcoder.jp/contests/abc338/tasks/abc338_e

https://atcoder.jp/contests/abc405/editorial/13011 での方式と同じ実装して通った。

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

    int N;
    cin >> N;

    vector<pair<int, int>> ps;
    rep(i, N) {
        int a, b;
        cin >> a >> b;
        a--, b--;
        if (a > b)
            swap(a, b);
        ps.emplace_back(a, b);
    }

    sort(all(ps), [](auto a, auto b) -> bool {
        return a.second < b.second;
    });

    auto op = [](ll a, ll b) -> ll { return a + b; };
    auto e = []() -> ll { return 0ll; };

    segtree<ll, op, e> seg(N * 2);
    rep(i, N) {
        seg.set(ps[i].first, 1);
    }

    bool ans = false;
    for (auto [a, b] : ps) {
        int sum = seg.prod(a + 1, b);
        if (sum > 0)
            ans = true;
        seg.set(a, -1);
        seg.set(b, 1);
    }
    yesno(ans);
}

F. Negative Traveling Salesman

https://atcoder.jp/contests/abc338/tasks/abc338_f

G. evall

https://atcoder.jp/contests/abc338/tasks/abc338_g