提出 #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 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| 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 |