Submission #59717

#TimeUsernameProblemLanguageResultExecution timeMemory
59717model_codeElection (BOI18_election)C++17
28 / 100
3031 ms1348 KiB
// Andrei-Costin Constantinescu
// O(N^2)
#include <bits/stdc++.h>

using namespace std;

const int NMAX = 500000 + 5;
int N, v[NMAX];

int main() {
    //freopen("data.in", "r", stdin);
    cin >> N;
    assert(1 <= N && N <= 500000);

    string votes;
    cin >> votes;
    assert(static_cast <int>(votes.size()) == N);

    for (int i = 1; i <= N; ++ i) {
        assert(votes[i - 1] == 'C' || votes[i - 1] == 'T');
        v[i] = votes[i - 1] == 'C' ? 1 : -1;
    }

    int Q = 0;
    cin >> Q;
    assert(1 <= Q && Q <= 500000);

    vector <int> marked;
    for (int i = 1; i <= Q; ++ i) {
        int l, r;
        cin >> l >> r;
        assert(1 <= l && l <= r && r <= N);

        marked.clear();
        int sum = 0, ans = 0;
        for (int j = l; j <= r; ++ j) {
            sum += v[j];
            if (sum < 0)
                sum = 0, ++ ans, marked.push_back(j);
        }

        sum = 0;
        for (int j = r, k = marked.size() - 1; j >= l; -- j) {
            while (k >= 0 && marked[k] > j)
                -- k;
            if (k >= 0 && marked[k] == j)
                continue;
            sum += v[j];
            if (sum < 0)
                sum = 0, ++ ans;
        }

        cout << ans << '\n';
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...