提出 #67792384


ソースコード 拡げる

#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;
}

提出情報

提出日時
問題 F - Max Combo
ユーザ jjjxs
言語 C++ 20 (gcc 12.2)
得点 525
コード長 2823 Byte
結果 AC
実行時間 384 ms
メモリ 29120 KiB

コンパイルエラー

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;
      |                           ~~^~~

ジャッジ結果

セット名 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 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