提出 #67727899


ソースコード 拡げる

#include <bits/stdc++.h>
using namespace std;

struct Node {
    char leftChar, rightChar;
    int length;
    int leftCnt, rightCnt, bestCnt;
    Node() {
        leftChar = rightChar = 0;
        length = leftCnt = rightCnt = bestCnt = 0;
    }
    Node(char c) {
        leftChar = rightChar = c;
        length = leftCnt = rightCnt = bestCnt = 1;
    }
};

class Solution {
    int N, Q;
    string S;
    Node *tree;

    Node combine(Node &L, Node &R) {
        if (L.length == 0) return R;
        if (R.length == 0) return L;
        Node res;
        res.length = L.length + R.length;
        res.leftChar = L.leftChar;
        res.rightChar = R.rightChar;

        res.bestCnt = max(L.bestCnt, R.bestCnt);
        if (L.rightChar == R.leftChar) {
            int cross = L.rightCnt + R.leftCnt;
            res.bestCnt = max(res.bestCnt, cross);
        }

        res.leftCnt = L.leftCnt;
        if (L.leftCnt == L.length && L.rightChar == R.leftChar) {
            res.leftCnt = L.length + R.leftCnt;
        }

        res.rightCnt = R.rightCnt;
        if (R.rightCnt == R.length && L.rightChar == R.leftChar) {
            res.rightCnt = R.length + L.rightCnt;
        }

        return res;
    }

    void build(int idx, int l, int r) {
        if (l == r) {
            tree[idx] = Node(S[l]);
            return;
        }
        int mid = (l + r) / 2;
        build(idx*2, l, mid);
        build(idx*2+1, mid+1, r);
        tree[idx] = combine(tree[idx*2], tree[idx*2+1]);
    }

    void update(int idx, int l, int r, int pos, char c) {
        if (l == r) {
            tree[idx] = Node(c);
            return;
        }
        int mid = (l + r) / 2;
        if (pos <= mid) {
            update(idx*2, l, mid, pos, c);
        } else {
            update(idx*2+1, mid+1, r, pos, c);
        }
        tree[idx] = combine(tree[idx*2], tree[idx*2+1]);
    }

    Node query(int idx, int l, int r, int ql, int qr) {
        if (qr < l || r < ql) {
            return Node();
        }
        if (ql <= l && r <= qr) {
            return tree[idx];
        }
        int mid = (l + r) / 2;
        Node leftRes = query(idx*2, l, mid, ql, qr);
        Node rightRes = query(idx*2+1, mid+1, r, ql, qr);
        return combine(leftRes, rightRes);
    }

public:
    void solve() {
        cin >> N >> Q;
        cin >> S;
        tree = new Node[4 * N + 5];

        build(1, 0, N - 1);

        for (int qi = 0; qi < Q; ++qi) {
            int type;
            cin >> type;
            if (type == 1) {
                int pos;
                char c;
                cin >> pos >> c;
                --pos;
                update(1, 0, N - 1, pos, c);
            } else {
                int l, r;
                cin >> l >> r;
                --l; --r;
                Node ans = query(1, 0, N - 1, l, r);
                cout << ans.bestCnt << "\n";
            }
        }

    }
};

int main() {
    Solution *sol = new Solution();
    sol->solve();
    return 0;
}

提出情報

提出日時
問題 F - Max Combo
ユーザ Naman____17
言語 C++ 17 (Clang 16.0.6)
得点 525
コード長 3116 Byte
結果 AC
実行時間 771 ms
メモリ 43724 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 525 / 525
結果
AC × 2
AC × 74
セット名 テストケース
Sample sample_01.txt, sample_02.txt
All evil_01.txt, evil_02.txt, evil_03.txt, evil_04.txt, evil_05.txt, evil_06.txt, evil_07.txt, evil_08.txt, evil_09.txt, evil_10.txt, evil_11.txt, evil_12.txt, evil_13.txt, evil_14.txt, evil_15.txt, evil_16.txt, evil_17.txt, evil_18.txt, evil_19.txt, evil_20.txt, evil_21.txt, evil_22.txt, evil_23.txt, evil_24.txt, evil_25.txt, evil_26.txt, evil_27.txt, evil_28.txt, sample_01.txt, sample_02.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt, test_44.txt
ケース名 結果 実行時間 メモリ
evil_01.txt AC 641 ms 43180 KiB
evil_02.txt AC 676 ms 43100 KiB
evil_03.txt AC 662 ms 43176 KiB
evil_04.txt AC 703 ms 43172 KiB
evil_05.txt AC 664 ms 43324 KiB
evil_06.txt AC 702 ms 43156 KiB
evil_07.txt AC 670 ms 43136 KiB
evil_08.txt AC 705 ms 43324 KiB
evil_09.txt AC 671 ms 43132 KiB
evil_10.txt AC 703 ms 43176 KiB
evil_11.txt AC 666 ms 43132 KiB
evil_12.txt AC 694 ms 43192 KiB
evil_13.txt AC 664 ms 43248 KiB
evil_14.txt AC 698 ms 43176 KiB
evil_15.txt AC 665 ms 43196 KiB
evil_16.txt AC 703 ms 43100 KiB
evil_17.txt AC 667 ms 43196 KiB
evil_18.txt AC 695 ms 43240 KiB
evil_19.txt AC 673 ms 43136 KiB
evil_20.txt AC 705 ms 43132 KiB
evil_21.txt AC 686 ms 43188 KiB
evil_22.txt AC 691 ms 43188 KiB
evil_23.txt AC 676 ms 43188 KiB
evil_24.txt AC 689 ms 43184 KiB
evil_25.txt AC 613 ms 43136 KiB
evil_26.txt AC 614 ms 43136 KiB
evil_27.txt AC 519 ms 43192 KiB
evil_28.txt AC 647 ms 43248 KiB
sample_01.txt AC 1 ms 3484 KiB
sample_02.txt AC 1 ms 3560 KiB
test_01.txt AC 698 ms 43160 KiB
test_02.txt AC 695 ms 43128 KiB
test_03.txt AC 692 ms 43196 KiB
test_04.txt AC 690 ms 43180 KiB
test_05.txt AC 694 ms 43248 KiB
test_06.txt AC 688 ms 43180 KiB
test_07.txt AC 692 ms 43164 KiB
test_08.txt AC 701 ms 43128 KiB
test_09.txt AC 726 ms 43248 KiB
test_10.txt AC 721 ms 43192 KiB
test_11.txt AC 717 ms 43252 KiB
test_12.txt AC 721 ms 43244 KiB
test_13.txt AC 715 ms 42996 KiB
test_14.txt AC 710 ms 43248 KiB
test_15.txt AC 709 ms 43244 KiB
test_16.txt AC 715 ms 43192 KiB
test_17.txt AC 707 ms 43240 KiB
test_18.txt AC 718 ms 43192 KiB
test_19.txt AC 764 ms 3620 KiB
test_20.txt AC 761 ms 3572 KiB
test_21.txt AC 770 ms 3648 KiB
test_22.txt AC 768 ms 3584 KiB
test_23.txt AC 771 ms 3568 KiB
test_24.txt AC 771 ms 3484 KiB
test_25.txt AC 766 ms 3648 KiB
test_26.txt AC 770 ms 3564 KiB
test_27.txt AC 766 ms 3568 KiB
test_28.txt AC 767 ms 3424 KiB
test_29.txt AC 706 ms 43676 KiB
test_30.txt AC 705 ms 43724 KiB
test_31.txt AC 696 ms 43132 KiB
test_32.txt AC 697 ms 43084 KiB
test_33.txt AC 696 ms 43080 KiB
test_34.txt AC 694 ms 43252 KiB
test_35.txt AC 700 ms 43192 KiB
test_36.txt AC 697 ms 43080 KiB
test_37.txt AC 698 ms 43248 KiB
test_38.txt AC 698 ms 43172 KiB
test_39.txt AC 699 ms 43164 KiB
test_40.txt AC 697 ms 43248 KiB
test_41.txt AC 715 ms 43172 KiB
test_42.txt AC 714 ms 43084 KiB
test_43.txt AC 323 ms 43020 KiB
test_44.txt AC 313 ms 43164 KiB