Submission #67792384
Source Code Expand
#include <bits/stdc++.h>
//#define int long long
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
#define fr first
#define se second
#define endl '\n'
#define pb push_back
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const int N = 5e5 + 10;
struct Node{
int l, r;
char ch_l, ch_r;
int prelen, suflen;
int max_seglen;
}tr[N << 2];
struct SegTree{
#define lc p<<1
#define rc p<<1|1
void pushup(int p){
tr[p].ch_l = tr[lc].ch_l;
tr[p].ch_r = tr[rc].ch_r;
tr[p].prelen = tr[lc].prelen;
if(tr[lc].prelen == tr[lc].r - tr[lc].l + 1 && tr[rc].ch_l == tr[lc].ch_r){
tr[p].prelen += tr[rc].prelen;
}
tr[p].suflen = tr[rc].suflen;
if(tr[rc].suflen == tr[rc].r - tr[rc].l + 1 && tr[rc].ch_l == tr[lc].ch_r){
tr[p].suflen += tr[lc].suflen;
}
tr[p].max_seglen = max(tr[lc].max_seglen, tr[rc].max_seglen);
if(tr[lc].ch_r == tr[rc].ch_l){
tr[p].max_seglen = max(tr[p].max_seglen, tr[lc].suflen + tr[rc].prelen);
}
}
void build(int p, int l, int r, auto& arr){
tr[p] = {l, r, arr[l], arr[l], 1, 1, 1};
if(l == r) return;
int mid = l + r >> 1;
build(lc, l, mid, arr);
build(rc, mid + 1, r, arr);
pushup(p);
}
void update(int p, int l, int r, char ch){
if(tr[p].l == l && r == tr[p].r){
tr[p].ch_l = tr[p].ch_r = ch;
return;
}
int mid = tr[p].l + tr[p].r >> 1;
if(l <= mid) update(lc, l, r, ch);
if(r > mid) update(rc, l, r, ch);
pushup(p);
}
Node query_max_seglen(int p, int l, int r){
if(l <= tr[p].l && tr[p].r <= r){
return tr[p];
}
int mid = tr[p].l + tr[p].r >> 1;
if(r <= mid) return query_max_seglen(lc, l, r);
if(l > mid) return query_max_seglen(rc, l, r);
Node L = query_max_seglen(lc, l, r);
Node R = query_max_seglen(rc, l, r);
Node t;
t.ch_l = L.ch_l;
t.ch_r = R.ch_r;
t.prelen = L.prelen;
if(L.prelen == L.r - L.l + 1 && R.ch_l == L.ch_r){
t.prelen += R.prelen;
}
t.suflen = R.suflen;
if(R.suflen == R.r - R.l + 1 && R.ch_l == L.ch_r){
t.suflen += L.suflen;
}
t.max_seglen = max(L.max_seglen, R.max_seglen);
if(R.ch_l == L.ch_r){
t.max_seglen = max(t.max_seglen, L.suflen + R.prelen);
}
return t;
}
};
int n, q;
string str;
SegTree seg;
void solve()
{
cin >> n >> q;
cin >> str;
str = " " + str;
seg.build(1, 1, n, str);
while(q --){
int op;
cin >> op;
if(op == 1){
int i;
char x;
cin >> i >> x;
seg.update(1, i, i, x);
}
else{
int l, r;
cin >> l >> r;
cout << seg.query_max_seglen(1, l, r).max_seglen << endl;
}
}
}
signed main()
{
ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
// int T=1; cin>>T; while(T--)
solve();
return 0;
}
Submission Info
| Submission Time | |
|---|---|
| Task | F - Max Combo |
| User | jjjxs |
| Language | C++ 20 (gcc 12.2) |
| Score | 525 |
| Code Size | 2823 Byte |
| Status | AC |
| Exec Time | 384 ms |
| Memory | 29120 KiB |
Compile Error
Main.cpp: In member function ‘void SegTree::update(int, int, int, char)’:
Main.cpp:59:35: warning: suggest parentheses around ‘+’ inside ‘>>’ [-Wparentheses]
59 | int mid = tr[p].l + tr[p].r >> 1;
| ~~~~~~~~^~~~~~~~~
Main.cpp: In member function ‘Node SegTree::query_max_seglen(int, int, int)’:
Main.cpp:69:35: warning: suggest parentheses around ‘+’ inside ‘>>’ [-Wparentheses]
69 | int mid = tr[p].l + tr[p].r >> 1;
| ~~~~~~~~^~~~~~~~~
Main.cpp: In instantiation of ‘void SegTree::build(int, int, int, auto:53&) [with auto:53 = std::__cxx11::basic_string<char>]’:
Main.cpp:104:11: required from here
Main.cpp:48:29: warning: suggest parentheses around ‘+’ inside ‘>>’ [-Wparentheses]
48 | int mid = l + r >> 1;
| ~~^~~
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 | 268 ms | 28364 KiB |
| evil_02.txt | AC | 314 ms | 28376 KiB |
| evil_03.txt | AC | 282 ms | 28324 KiB |
| evil_04.txt | AC | 336 ms | 28536 KiB |
| evil_05.txt | AC | 304 ms | 28300 KiB |
| evil_06.txt | AC | 326 ms | 28388 KiB |
| evil_07.txt | AC | 295 ms | 28392 KiB |
| evil_08.txt | AC | 316 ms | 28364 KiB |
| evil_09.txt | AC | 293 ms | 28404 KiB |
| evil_10.txt | AC | 326 ms | 28400 KiB |
| evil_11.txt | AC | 292 ms | 28476 KiB |
| evil_12.txt | AC | 336 ms | 28380 KiB |
| evil_13.txt | AC | 292 ms | 28300 KiB |
| evil_14.txt | AC | 334 ms | 28532 KiB |
| evil_15.txt | AC | 282 ms | 28372 KiB |
| evil_16.txt | AC | 331 ms | 28396 KiB |
| evil_17.txt | AC | 291 ms | 28380 KiB |
| evil_18.txt | AC | 324 ms | 28428 KiB |
| evil_19.txt | AC | 298 ms | 28444 KiB |
| evil_20.txt | AC | 339 ms | 28320 KiB |
| evil_21.txt | AC | 325 ms | 28376 KiB |
| evil_22.txt | AC | 336 ms | 28368 KiB |
| evil_23.txt | AC | 312 ms | 28444 KiB |
| evil_24.txt | AC | 327 ms | 28328 KiB |
| evil_25.txt | AC | 245 ms | 28296 KiB |
| evil_26.txt | AC | 241 ms | 28404 KiB |
| evil_27.txt | AC | 154 ms | 28364 KiB |
| evil_28.txt | AC | 266 ms | 28424 KiB |
| sample_01.txt | AC | 2 ms | 3640 KiB |
| sample_02.txt | AC | 1 ms | 3428 KiB |
| test_01.txt | AC | 356 ms | 28492 KiB |
| test_02.txt | AC | 351 ms | 28416 KiB |
| test_03.txt | AC | 337 ms | 28372 KiB |
| test_04.txt | AC | 346 ms | 28300 KiB |
| test_05.txt | AC | 335 ms | 28432 KiB |
| test_06.txt | AC | 343 ms | 28436 KiB |
| test_07.txt | AC | 352 ms | 28392 KiB |
| test_08.txt | AC | 340 ms | 28376 KiB |
| test_09.txt | AC | 381 ms | 28472 KiB |
| test_10.txt | AC | 354 ms | 28448 KiB |
| test_11.txt | AC | 354 ms | 28308 KiB |
| test_12.txt | AC | 352 ms | 28372 KiB |
| test_13.txt | AC | 359 ms | 28324 KiB |
| test_14.txt | AC | 384 ms | 28424 KiB |
| test_15.txt | AC | 373 ms | 28372 KiB |
| test_16.txt | AC | 364 ms | 28372 KiB |
| test_17.txt | AC | 358 ms | 28376 KiB |
| test_18.txt | AC | 363 ms | 28388 KiB |
| test_19.txt | AC | 147 ms | 3508 KiB |
| test_20.txt | AC | 147 ms | 3672 KiB |
| test_21.txt | AC | 152 ms | 3568 KiB |
| test_22.txt | AC | 151 ms | 3492 KiB |
| test_23.txt | AC | 154 ms | 3556 KiB |
| test_24.txt | AC | 148 ms | 3496 KiB |
| test_25.txt | AC | 149 ms | 3624 KiB |
| test_26.txt | AC | 149 ms | 3500 KiB |
| test_27.txt | AC | 147 ms | 3556 KiB |
| test_28.txt | AC | 147 ms | 3556 KiB |
| test_29.txt | AC | 86 ms | 29120 KiB |
| test_30.txt | AC | 86 ms | 29100 KiB |
| test_31.txt | AC | 335 ms | 28372 KiB |
| test_32.txt | AC | 338 ms | 28476 KiB |
| test_33.txt | AC | 331 ms | 28536 KiB |
| test_34.txt | AC | 338 ms | 28476 KiB |
| test_35.txt | AC | 318 ms | 28388 KiB |
| test_36.txt | AC | 325 ms | 28392 KiB |
| test_37.txt | AC | 330 ms | 28440 KiB |
| test_38.txt | AC | 347 ms | 28428 KiB |
| test_39.txt | AC | 351 ms | 28364 KiB |
| test_40.txt | AC | 340 ms | 28300 KiB |
| test_41.txt | AC | 356 ms | 28444 KiB |
| test_42.txt | AC | 374 ms | 28376 KiB |
| test_43.txt | AC | 248 ms | 28404 KiB |
| test_44.txt | AC | 256 ms | 28428 KiB |