AGC 058
Table of Contents
https://atcoder.jp/contests/abc058
A. Make it Zigzag
https://atcoder.jp/contests/agc058/tasks/agc058_a
0-index で考える。 $i \equiv 0 \mod 2$ のときに、$P_i$, $P_{i+1}$, $P_{i+2}$ の大小関係は以下の4通りにに分けられる。
- Type A: $P_i < P_{i+1} < P_{i+2}$
 - Type B: $P_i > P_{i+1} > P_{i+2}$
 - Type C: $P_i > P_{i+1} < P_{i+2}$
 - Type D: $P_i < P_{i+1} > P_{i+2}$
 
Type A のとき、 $\mathrm{swap}(P_{i+1}, P_{i+2})$ を行うことで $P_i < P_{i+1} > P_{i+2}$ を実現できる
Type B のとき、 $\mathrm{swap}(P_i, P_{i+1})$ を行うことで $P_i < P_{i+1} > P_{i+2}$ を実現できる
Type C のとき、 $P_i > P_{i+2}$ ならば $\mathrm{swap}(P_i, P_{i+1})$ を行い、$P_i < P_{i+2}$ なら $\mathrm{swap}(P_{i+1}, P_{i+2})$ をすることで $P_i < P_{i+1} > P_{i+2}$ を実現できる
Type D のときは何もする必要ない
$i = 2N-1$ のときは、$P_{i} > P{i+1}$ ならば $\mathrm{swap}(P_i, P_{i+1})$ を行う.
$i \equiv 0 \mod 2$ のときに上記の操作をしていれば $i \equiv 1 \mod 2$ のときは操作を必要はない。 よって、$N$ 回以下の操作で条件を満たすことができる。
void solve() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    int N;
    cin >> N;
    vint P(N * 2);
    rep(i, N * 2) cin >> P[i];
    vint ans;
    for (int i = 0; i < N * 2 - 1; i += 2) {
        if (i == N * 2 - 2) {
            if (P[i] > P[i + 1]) {
                swap(P[i], P[i + 1]);
                ans.push_back(i);
            }
        } else {
            if (P[i] < P[i + 1] && P[i + 1] < P[i + 2]) {
                swap(P[i + 1], P[i + 2]);
                ans.push_back(i + 1);
            } else if (P[i] > P[i + 1] && P[i + 1] > P[i + 2]) {
                swap(P[i], P[i + 1]);
                ans.push_back(i);
            } else if (P[i] > P[i + 1] && P[i + 1] < P[i + 2]) {
                if (P[i] > P[i + 2]) {
                    swap(P[i], P[i + 1]);
                    ans.push_back(i);
                } else {
                    swap(P[i + 1], P[i + 2]);
                    ans.push_back(i + 1);
                }
            }
        }
    }
    for (int& x : ans)
        x++;
    cout << ans.size() << endl;
    print(ans);
}
B. Adjacent Chmax
https://atcoder.jp/contests/agc058/tasks/agc058_b
C. Planar Tree
https://atcoder.jp/contests/agc058/tasks/agc058_c
D. Yet Another ABC String
https://atcoder.jp/contests/agc058/tasks/agc058_d
E. Nearer Permutation
https://atcoder.jp/contests/agc058/tasks/agc058_e