Submission #75819533
Source Code Expand
#include <bits/stdc++.h>
using namespace std;
// https://github.com/skrewbar/cp-templates
#define all(v) (v).begin(), (v).end()
#define compress(v) \
sort(all(v)); \
v.erase(unique(all(v)), (v).end())
#define by(x) [](const auto& a, const auto& b) { return a.x < b.x; }
#define by_desc(x) [](const auto& a, const auto& b) { return a.x > b.x; }
template <typename T>
using MinHeap = priority_queue<T, vector<T>, greater<T>>;
template <typename T>
bool minimize(T& target, T candidate) {
return target > candidate ? (target = candidate, true) : false;
}
template <typename T>
bool maximize(T& target, T candidate) {
return target < candidate ? (target = candidate, true) : false;
}
int dp[303030];
int groupStart[303030];
int groupEnd[303030];
int groupNum[303030];
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N, Q;
cin >> N >> Q;
string S;
cin >> S;
S = "#" + S;
int groupCnt = 0;
for (int i = 1, j; i <= N; i = j) {
j = i + 1;
while (j <= N and S[j] == S[i])
j++;
groupCnt++;
groupStart[groupCnt] = i;
groupEnd[groupCnt] = j - 1;
for (int k = i; k < j; k++)
groupNum[k] = groupCnt;
}
for (int i = 1; i <= N; i = groupEnd[groupNum[i]] + 1) {
int num = groupNum[i];
dp[num] = dp[num - 1];
if (S[i] != 'X')
dp[num] += (groupEnd[num] - groupStart[num] + 1) / 2;
}
while (Q--) {
int l, r;
cin >> l >> r;
int lnum = groupNum[l];
int rnum = groupNum[r];
int answer = 0;
if (lnum + 1 <= rnum - 1)
answer += dp[rnum - 1] - dp[lnum];
if (lnum == rnum and S[l] != 'X')
answer += (r - l + 1) / 2;
else {
if (S[l] != 'X')
answer += (groupEnd[lnum] - l + 1) / 2;
if (S[r] != 'X')
answer += (r - groupStart[rnum] + 1) / 2;
}
cout << answer << '\n';
}
return 0;
}
Submission Info
| Submission Time | |
|---|---|
| Task | D - Coloring |
| User | skuru |
| Language | C++23 (GCC 15.2.0) |
| Score | 100 |
| Code Size | 2128 Byte |
| Status | AC |
| Exec Time | 55 ms |
| Memory | 8344 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 100 / 100 | ||||
| Status |
|
|
| 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 | 1 ms | 3400 KiB |
| 01-001.txt | AC | 54 ms | 7456 KiB |
| 01-002.txt | AC | 54 ms | 7520 KiB |
| 01-003.txt | AC | 54 ms | 7400 KiB |
| 01-004.txt | AC | 55 ms | 7468 KiB |
| 01-005.txt | AC | 54 ms | 7472 KiB |
| 01-006.txt | AC | 55 ms | 7472 KiB |
| 01-007.txt | AC | 53 ms | 7616 KiB |
| 01-008.txt | AC | 54 ms | 7524 KiB |
| 01-009.txt | AC | 55 ms | 7400 KiB |
| 01-010.txt | AC | 55 ms | 7372 KiB |
| 01-011.txt | AC | 55 ms | 7304 KiB |
| 01-012.txt | AC | 54 ms | 7464 KiB |
| 01-013.txt | AC | 54 ms | 7408 KiB |
| 01-014.txt | AC | 54 ms | 7460 KiB |
| 01-015.txt | AC | 55 ms | 7620 KiB |
| 01-016.txt | AC | 32 ms | 4772 KiB |
| 01-017.txt | AC | 33 ms | 4824 KiB |
| 01-018.txt | AC | 32 ms | 4832 KiB |
| 01-019.txt | AC | 30 ms | 4892 KiB |
| 01-020.txt | AC | 50 ms | 8344 KiB |
| 01-021.txt | AC | 49 ms | 8344 KiB |
| 01-022.txt | AC | 47 ms | 8344 KiB |
| 01-023.txt | AC | 42 ms | 6748 KiB |
| 01-024.txt | AC | 40 ms | 5948 KiB |
| 01-025.txt | AC | 35 ms | 4808 KiB |
| 01-026.txt | AC | 35 ms | 4916 KiB |
| 01-027.txt | AC | 35 ms | 4836 KiB |
| 01-028.txt | AC | 34 ms | 4840 KiB |
| 01-029.txt | AC | 31 ms | 4804 KiB |
| 01-030.txt | AC | 36 ms | 4840 KiB |
| 01-031.txt | AC | 36 ms | 4884 KiB |
| 01-032.txt | AC | 35 ms | 4772 KiB |
| 01-033.txt | AC | 34 ms | 4844 KiB |
| 01-034.txt | AC | 40 ms | 6608 KiB |
| 01-035.txt | AC | 39 ms | 6692 KiB |
| 01-036.txt | AC | 40 ms | 6612 KiB |
| 01-037.txt | AC | 36 ms | 4840 KiB |
| 01-038.txt | AC | 1 ms | 3464 KiB |
| 01-039.txt | AC | 1 ms | 3432 KiB |
| 01-040.txt | AC | 1 ms | 3228 KiB |
| 01-041.txt | AC | 1 ms | 3248 KiB |
| 01-042.txt | AC | 1 ms | 3408 KiB |
| 01-043.txt | AC | 1 ms | 3412 KiB |