Submission #67738124
Source Code Expand
#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 5;
int n, T;
struct node {
int ans, pre, suf, len;
char lc, rc;
};
node tree[4 * N];
char s[N];
node tg(node a, node b) {
node t;
t.len = a.len + b.len;
t.lc = a.lc;
t.rc = b.rc;
t.ans = max(a.ans, b.ans);
if (a.rc == b.lc) {
t.ans = max(t.ans, a.suf + b.pre);
}
t.pre = a.pre;
if (a.pre == a.len && a.rc == b.lc) {
t.pre = a.pre + b.pre;
}
t.suf = b.suf;
if (b.suf == b.len && a.rc == b.lc) {
t.suf = b.suf + a.suf;
}
return t;
}
void build(int v, int tl, int tr) {
if (tl == tr) {
tree[v] = {1, 1, 1, 1, s[tl], s[tl]};
return;
}
int tm = (tl + tr) / 2;
build(v * 2, tl, tm);
build(v * 2 + 1, tm + 1, tr);
tree[v] = tg(tree[v * 2], tree[v * 2 + 1]);
}
void update(int v, int tl, int tr, int pos, char c) {
if (tl == tr) {
tree[v] = {1, 1, 1, 1, c, c};
return;
}
int tm = (tl + tr) / 2;
if (pos <= tm) {
update(v * 2, tl, tm, pos, c);
} else {
update(v * 2 + 1, tm + 1, tr, pos, c);
}
tree[v] = tg(tree[v * 2], tree[v * 2 + 1]);
}
node query(int v, int tl, int tr, int l, int r) {
if (l <= tl && tr <= r) {
return tree[v];
}
int tm = (tl + tr) / 2;
if (r <= tm) {
return query(v * 2, tl, tm, l, r);
}
if (l > tm) {
return query(v * 2 + 1, tm + 1, tr, l, r);
}
node ln = query(v * 2, tl, tm, l, tm);
node rn = query(v * 2 + 1, tm + 1, tr, tm + 1, r);
return tg(ln, rn);
}
int main() {
scanf("%d%d", &n, &T);
scanf("%s", s);
build(1, 0, n - 1);
while (T--) {
int op;
scanf("%d", &op);
if (op == 1) {
int i;
char c;
scanf("%d %c", &i, &c);
update(1, 0, n - 1, i - 1, c);
} else {
int l, r;
scanf("%d%d", &l, &r);
node t = query(1, 0, n - 1, l - 1, r - 1);
printf("%d\n", t.ans);
}
}
return 0;
}
Submission Info
| Submission Time |
|
| Task |
F - Max Combo |
| User |
MhxMa |
| Language |
C++ 20 (gcc 12.2) |
| Score |
525 |
| Code Size |
2172 Byte |
| Status |
AC |
| Exec Time |
313 ms |
| Memory |
24948 KiB |
Compile Error
Main.cpp: In function ‘int main()’:
Main.cpp:77:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
77 | scanf("%d%d", &n, &T);
| ~~~~~^~~~~~~~~~~~~~~~
Main.cpp:78:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
78 | scanf("%s", s);
| ~~~~~^~~~~~~~~
Main.cpp:82:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
82 | scanf("%d", &op);
| ~~~~~^~~~~~~~~~~
Main.cpp:86:18: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
86 | scanf("%d %c", &i, &c);
| ~~~~~^~~~~~~~~~~~~~~~~
Main.cpp:90:18: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
90 | scanf("%d%d", &l, &r);
| ~~~~~^~~~~~~~~~~~~~~~
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
525 / 525 |
| Status |
|
|
| Set Name |
Test Cases |
| 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 |
| Case Name |
Status |
Exec Time |
Memory |
| evil_01.txt |
AC |
236 ms |
24756 KiB |
| evil_02.txt |
AC |
276 ms |
24544 KiB |
| evil_03.txt |
AC |
257 ms |
24552 KiB |
| evil_04.txt |
AC |
300 ms |
24696 KiB |
| evil_05.txt |
AC |
259 ms |
24684 KiB |
| evil_06.txt |
AC |
300 ms |
24616 KiB |
| evil_07.txt |
AC |
261 ms |
24752 KiB |
| evil_08.txt |
AC |
303 ms |
24624 KiB |
| evil_09.txt |
AC |
260 ms |
24688 KiB |
| evil_10.txt |
AC |
297 ms |
24544 KiB |
| evil_11.txt |
AC |
258 ms |
24548 KiB |
| evil_12.txt |
AC |
297 ms |
24552 KiB |
| evil_13.txt |
AC |
264 ms |
24680 KiB |
| evil_14.txt |
AC |
292 ms |
24584 KiB |
| evil_15.txt |
AC |
261 ms |
24508 KiB |
| evil_16.txt |
AC |
295 ms |
24548 KiB |
| evil_17.txt |
AC |
258 ms |
24496 KiB |
| evil_18.txt |
AC |
287 ms |
24756 KiB |
| evil_19.txt |
AC |
262 ms |
24692 KiB |
| evil_20.txt |
AC |
294 ms |
24688 KiB |
| evil_21.txt |
AC |
276 ms |
24816 KiB |
| evil_22.txt |
AC |
285 ms |
24760 KiB |
| evil_23.txt |
AC |
275 ms |
24560 KiB |
| evil_24.txt |
AC |
290 ms |
24508 KiB |
| evil_25.txt |
AC |
248 ms |
24564 KiB |
| evil_26.txt |
AC |
244 ms |
24564 KiB |
| evil_27.txt |
AC |
161 ms |
24552 KiB |
| evil_28.txt |
AC |
279 ms |
24536 KiB |
| sample_01.txt |
AC |
1 ms |
3628 KiB |
| sample_02.txt |
AC |
1 ms |
3632 KiB |
| test_01.txt |
AC |
284 ms |
24756 KiB |
| test_02.txt |
AC |
284 ms |
24816 KiB |
| test_03.txt |
AC |
284 ms |
24548 KiB |
| test_04.txt |
AC |
284 ms |
24552 KiB |
| test_05.txt |
AC |
281 ms |
24492 KiB |
| test_06.txt |
AC |
283 ms |
24700 KiB |
| test_07.txt |
AC |
290 ms |
24548 KiB |
| test_08.txt |
AC |
283 ms |
24588 KiB |
| test_09.txt |
AC |
313 ms |
24512 KiB |
| test_10.txt |
AC |
310 ms |
24616 KiB |
| test_11.txt |
AC |
310 ms |
24684 KiB |
| test_12.txt |
AC |
311 ms |
24696 KiB |
| test_13.txt |
AC |
310 ms |
24508 KiB |
| test_14.txt |
AC |
313 ms |
24496 KiB |
| test_15.txt |
AC |
308 ms |
24728 KiB |
| test_16.txt |
AC |
310 ms |
24560 KiB |
| test_17.txt |
AC |
310 ms |
24620 KiB |
| test_18.txt |
AC |
310 ms |
24688 KiB |
| test_19.txt |
AC |
177 ms |
3572 KiB |
| test_20.txt |
AC |
178 ms |
3828 KiB |
| test_21.txt |
AC |
190 ms |
3772 KiB |
| test_22.txt |
AC |
190 ms |
3888 KiB |
| test_23.txt |
AC |
188 ms |
3756 KiB |
| test_24.txt |
AC |
186 ms |
3776 KiB |
| test_25.txt |
AC |
180 ms |
3624 KiB |
| test_26.txt |
AC |
183 ms |
3572 KiB |
| test_27.txt |
AC |
179 ms |
3692 KiB |
| test_28.txt |
AC |
179 ms |
3640 KiB |
| test_29.txt |
AC |
107 ms |
24948 KiB |
| test_30.txt |
AC |
107 ms |
24924 KiB |
| test_31.txt |
AC |
292 ms |
24548 KiB |
| test_32.txt |
AC |
294 ms |
24700 KiB |
| test_33.txt |
AC |
290 ms |
24688 KiB |
| test_34.txt |
AC |
296 ms |
24564 KiB |
| test_35.txt |
AC |
291 ms |
24692 KiB |
| test_36.txt |
AC |
296 ms |
24616 KiB |
| test_37.txt |
AC |
294 ms |
24692 KiB |
| test_38.txt |
AC |
293 ms |
24688 KiB |
| test_39.txt |
AC |
302 ms |
24552 KiB |
| test_40.txt |
AC |
295 ms |
24748 KiB |
| test_41.txt |
AC |
301 ms |
24812 KiB |
| test_42.txt |
AC |
305 ms |
24592 KiB |
| test_43.txt |
AC |
211 ms |
24564 KiB |
| test_44.txt |
AC |
210 ms |
24628 KiB |