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
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 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