提出 #50402130


ソースコード 拡げる

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

using MappingParam = bool;

struct Node {
    using Value = bool;
    std::optional<Value> left;
    std::optional<Value> right;
    bool good {true};

    Node(void) = default;

    explicit Node(Value val) {
        left = val;
        right = val;
        good = true;
    }

    Node flip() const {
        Node result = *this;
        if (!result.is_unit()) {
            result.left = !left.value();
            result.right = !right.value();
        }

        return result;
    }

    Node merge(const Node& rhs) const {
        if (is_unit()) {
            return rhs;
        }

        if (rhs.is_unit()) {
            return *this;
        }

        Node result;
        result.left = left;
        result.right = rhs.right;
        result.good = good && rhs.good && (right != rhs.left);
        return result;
    }

    bool is_unit() const {
        return !left.has_value();
    }
};

Node func_operate(Node a, Node b) {
    return a.merge(b);
}

Node func_unit() {
    return Node();
}

Node func_map(MappingParam a, Node b) {
    if (a) {
        return b.flip();
    }
    return b;
}

MappingParam func_compose(MappingParam a, MappingParam b) {
    return a ^ b;
}

MappingParam func_id() {
    return false;
}

void solve(std::istream& is, std::ostream& os) {
    using Num = int;
    Num n, q;
    std::string s;
    is >> n >> q >> s;

    atcoder::lazy_segtree<Node, func_operate, func_unit, MappingParam, func_map, func_compose, func_id> tree(n);
    for(Num i{0}; i<n; ++i) {
        const auto d = s.at(i) - '0';
        const Node node(d > 0);
        tree.set(i, node);
    }

    while(q-- > 0) {
        Num cmd, l, r;
        is >> cmd >> l >> r;
        --l;

        if (cmd == 1) {
            tree.apply(l, r, true);
        } else {
            const auto node = tree.prod(l, r);
            if (node.good) {
                os << "Yes\n";
            } else {
                os << "No\n";
            }
        }
    }
}

int main(void) {
    solve(std::cin, std::cout);
    return 0;
}

提出情報

提出日時
問題 E - Alternating String
ユーザ zettsut
言語 C++ 20 (gcc 12.2)
得点 450
コード長 2193 Byte
結果 AC
実行時間 1288 ms
メモリ 11452 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 450 / 450
結果
AC × 2
AC × 42
セット名 テストケース
Sample example_00.txt, example_01.txt
All example_00.txt, example_01.txt, hand_00.txt, hand_01.txt, hand_02.txt, hand_03.txt, hand_04.txt, hand_05.txt, hand_06.txt, hand_07.txt, hand_08.txt, hand_09.txt, random_00.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt, random_10.txt, random_11.txt, random_12.txt, random_13.txt, random_14.txt, random_15.txt, random_16.txt, random_17.txt, random_18.txt, random_19.txt, random_20.txt, random_21.txt, random_22.txt, random_23.txt, random_24.txt, random_25.txt, random_26.txt, random_27.txt, random_28.txt, random_29.txt
ケース名 結果 実行時間 メモリ
example_00.txt AC 1 ms 3620 KiB
example_01.txt AC 1 ms 3624 KiB
hand_00.txt AC 815 ms 11320 KiB
hand_01.txt AC 1001 ms 11360 KiB
hand_02.txt AC 1023 ms 11316 KiB
hand_03.txt AC 931 ms 11392 KiB
hand_04.txt AC 612 ms 3552 KiB
hand_05.txt AC 932 ms 11352 KiB
hand_06.txt AC 987 ms 11296 KiB
hand_07.txt AC 931 ms 11348 KiB
hand_08.txt AC 933 ms 11264 KiB
hand_09.txt AC 932 ms 11300 KiB
random_00.txt AC 1189 ms 11252 KiB
random_01.txt AC 1288 ms 11308 KiB
random_02.txt AC 1197 ms 11352 KiB
random_03.txt AC 1207 ms 11236 KiB
random_04.txt AC 228 ms 11340 KiB
random_05.txt AC 229 ms 11300 KiB
random_06.txt AC 1122 ms 11232 KiB
random_07.txt AC 1271 ms 11308 KiB
random_08.txt AC 1137 ms 11288 KiB
random_09.txt AC 1219 ms 11240 KiB
random_10.txt AC 229 ms 11300 KiB
random_11.txt AC 230 ms 11344 KiB
random_12.txt AC 1128 ms 11304 KiB
random_13.txt AC 1219 ms 11312 KiB
random_14.txt AC 1119 ms 11316 KiB
random_15.txt AC 1219 ms 11340 KiB
random_16.txt AC 228 ms 11452 KiB
random_17.txt AC 228 ms 11248 KiB
random_18.txt AC 1137 ms 11296 KiB
random_19.txt AC 1220 ms 11312 KiB
random_20.txt AC 1205 ms 11236 KiB
random_21.txt AC 1209 ms 11348 KiB
random_22.txt AC 227 ms 11312 KiB
random_23.txt AC 226 ms 11280 KiB
random_24.txt AC 1160 ms 11284 KiB
random_25.txt AC 1239 ms 11236 KiB
random_26.txt AC 1198 ms 11300 KiB
random_27.txt AC 1243 ms 11316 KiB
random_28.txt AC 226 ms 11392 KiB
random_29.txt AC 229 ms 11252 KiB