Submission #75815969


Source Code Expand

#pragma GCC optimize("Ofast,unroll-loops")
#include <bits/stdc++.h>
#define rep(i, s, e) for (ll i = (s); i <= (e); i++)
#define all(v) v.begin(), v.end()
#define pb push_back
using namespace std;
using ll = long long;
using ull = unsigned long long;
using ld = long double;
using P = array<ll, 2>;
ll n, q, l, r;
string st;
struct T {
	ll cst, len, ld, rd;
	char lc, rc;
} seg[1212121];
T mg(T l, T r) {
	if (l.len == 0)
		return r;
	if (r.len == 0)
		return l;
	T rs;
	bool h = 0;
	rs.cst = l.cst + r.cst;
	rs.len = l.len + r.len;
	rs.lc = l.lc, rs.rc = r.rc;
	if (l.ld == l.len && l.lc == r.lc)
		rs.ld = l.ld + r.ld, h = 1;
	else
		rs.ld = l.ld;
	if (r.rd == r.len && l.rc == r.rc)
		rs.rd = l.rd + r.rd, h = 1;
	else
		rs.rd = r.rd;
	if (l.rd != l.len && r.ld != r.len && l.rc == r.lc) {
		if (l.rc != 'X')
			rs.cst += (l.rd + r.ld) / 2;
	} else if (!h) {
		if (l.rd != l.len && l.rc != 'X')
			rs.cst += l.rd / 2;
		if (r.ld != r.len && r.lc != 'X')
			rs.cst += r.ld / 2;
	}
	return rs;
}
void ini(ll s, ll e, ll d) {
	if (s < e) {
		ini(s, s + e >> 1, d * 2), ini(s + e + 2 >> 1, e, d * 2 + 1);
		seg[d] = mg(seg[d * 2], seg[d * 2 + 1]);
	} else {
		seg[d] = {0, 1, 1, 1, st[s - 1], st[s - 1]};
	}
}
T fnd(ll s, ll e, ll d) {
	if (s > r || e < l)
		return {0, 0, 0, 0, 0, 0};
	if (s >= l && e <= r)
		return seg[d];
	return mg(fnd(s, s + e >> 1, d * 2), fnd(s + e + 2 >> 1, e, d * 2 + 1));
}
int main() {
	cin.tie(0)->sync_with_stdio(0);
	cin >> n >> q >> st;
	ini(1, n, 1);
	while (q--) {
		cin >> l >> r;
		T rs = fnd(1, n, 1);
		ll res = rs.cst;
		if (rs.lc != 'X')
			res += rs.ld / 2;
		if (rs.rc != 'X' && rs.rd != rs.len)
			res += rs.rd / 2;
		cout << res << '\n';
	}
	return 0;
}

Submission Info

Submission Time
Task D - Coloring
User iAi
Language C++23 (GCC 15.2.0)
Score 100
Code Size 1772 Byte
Status AC
Exec Time 226 ms
Memory 44872 KiB

Compile Error

./Main.cpp: In function 'void ini(ll, ll, ll)':
./Main.cpp:48:26: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   48 |                 ini(s, s + e >> 1, d * 2), ini(s + e + 2 >> 1, e, d * 2 + 1);
      |                        ~~^~~
./Main.cpp:48:54: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   48 |                 ini(s, s + e >> 1, d * 2), ini(s + e + 2 >> 1, e, d * 2 + 1);
      |                                                ~~~~~~^~~
./Main.cpp: In function 'T fnd(ll, ll, ll)':
./Main.cpp:59:28: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   59 |         return mg(fnd(s, s + e >> 1, d * 2), fnd(s + e + 2 >> 1, e, d * 2 + 1));
      |                          ~~^~~
./Main.cpp:59:56: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   59 |         return mg(fnd(s, s + e >> 1, d * 2), fnd(s + e + 2 >> 1, e, d * 2 + 1));
      |                                                  ~~~~~~^~~

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 100 / 100
Status
AC × 1
AC × 44
Set Name Test Cases
Sample 00-sample-001.txt
All 00-sample-001.txt, 01-001.txt, 01-002.txt, 01-003.txt, 01-004.txt, 01-005.txt, 01-006.txt, 01-007.txt, 01-008.txt, 01-009.txt, 01-010.txt, 01-011.txt, 01-012.txt, 01-013.txt, 01-014.txt, 01-015.txt, 01-016.txt, 01-017.txt, 01-018.txt, 01-019.txt, 01-020.txt, 01-021.txt, 01-022.txt, 01-023.txt, 01-024.txt, 01-025.txt, 01-026.txt, 01-027.txt, 01-028.txt, 01-029.txt, 01-030.txt, 01-031.txt, 01-032.txt, 01-033.txt, 01-034.txt, 01-035.txt, 01-036.txt, 01-037.txt, 01-038.txt, 01-039.txt, 01-040.txt, 01-041.txt, 01-042.txt, 01-043.txt
Case Name Status Exec Time Memory
00-sample-001.txt AC 2 ms 3408 KiB
01-001.txt AC 226 ms 44716 KiB
01-002.txt AC 215 ms 44692 KiB
01-003.txt AC 214 ms 44864 KiB
01-004.txt AC 222 ms 44732 KiB
01-005.txt AC 223 ms 44744 KiB
01-006.txt AC 214 ms 44740 KiB
01-007.txt AC 209 ms 44740 KiB
01-008.txt AC 214 ms 44632 KiB
01-009.txt AC 209 ms 44872 KiB
01-010.txt AC 216 ms 44684 KiB
01-011.txt AC 210 ms 44872 KiB
01-012.txt AC 214 ms 44860 KiB
01-013.txt AC 217 ms 44732 KiB
01-014.txt AC 214 ms 44684 KiB
01-015.txt AC 210 ms 44872 KiB
01-016.txt AC 195 ms 44676 KiB
01-017.txt AC 197 ms 44656 KiB
01-018.txt AC 193 ms 44740 KiB
01-019.txt AC 189 ms 44692 KiB
01-020.txt AC 150 ms 44868 KiB
01-021.txt AC 150 ms 44728 KiB
01-022.txt AC 151 ms 44724 KiB
01-023.txt AC 167 ms 44684 KiB
01-024.txt AC 171 ms 44680 KiB
01-025.txt AC 201 ms 44860 KiB
01-026.txt AC 201 ms 44728 KiB
01-027.txt AC 197 ms 44724 KiB
01-028.txt AC 196 ms 44728 KiB
01-029.txt AC 192 ms 44744 KiB
01-030.txt AC 195 ms 44740 KiB
01-031.txt AC 195 ms 44872 KiB
01-032.txt AC 196 ms 44692 KiB
01-033.txt AC 199 ms 44756 KiB
01-034.txt AC 158 ms 44740 KiB
01-035.txt AC 155 ms 44716 KiB
01-036.txt AC 159 ms 44688 KiB
01-037.txt AC 190 ms 44744 KiB
01-038.txt AC 1 ms 3608 KiB
01-039.txt AC 1 ms 3608 KiB
01-040.txt AC 1 ms 3580 KiB
01-041.txt AC 1 ms 3532 KiB
01-042.txt AC 1 ms 3608 KiB
01-043.txt AC 1 ms 3580 KiB