Submission #1232840

#TimeUsernameProblemLanguageResultExecution timeMemory
1232840just_crowElection (BOI18_election)C++20
0 / 100
6 ms320 KiB
#include <bits/stdc++.h>

using namespace std;

vector<int> solutions;

int main() {
    int n;

    cin >> n;

    vector<char> el(n);

    for (int i = 0; i < n; ++i) {
        cin >> el[i];
    }

    int q;

    cin >> q;

    for (int i = 0; i < q; ++i) {
        int a, b;

        cin >> a >> b;

        vector<int> removeclump, removeclump1;

        int currcs = 0;
        int currts = 0;

        bool cstate = true;

        vector<int> csandts;

        for (int i = a - 1; i < b; ++i) {
            if (el[i] == 'C' and !cstate) {
                removeclump.push_back(currts - currcs + min((removeclump.size() > 0 ? removeclump.back() : 0), 0));

                csandts.push_back(currts);

                currcs = 1;
                currts = 0;

                cstate = true;
            } else if (el[i] == 'C') {
                ++currcs;
            } else if (el[i] == 'T') {
                if (cstate) {
                    cstate = false;

                    csandts.push_back(currcs);
                }

                ++currts;
            }
        }

        if (!cstate) {
            removeclump.push_back(currts - currcs + min((removeclump.size() > 0 ? removeclump.back() : 0), 0));
        }

        if (currts != 0 and !cstate) {
            csandts.push_back(currts);
        }

        if (cstate and currcs != 0) {
            csandts.push_back(currcs);
        }

        // FROM BACK

        bool startt = (el[b - 1] == 'T');

        int ts = 0;
        int crs = 0;

        for (int i = csandts.size() - 1; i >= 0; --i) {
            if (startt) {
                ts += csandts[i];

                removeclump1.push_back(ts - crs + min((removeclump1.size() > 0 ? removeclump1.back() : 0), 0));

                ts = 0;
                crs = 0;

                startt = false;
            } else {
                crs += csandts[i];

                startt = true;
            }
        }

        // END BACK

        int sum = 0;

        int cs = removeclump.size();

        for (int i = 0; i < cs; ++i) {
            sum += max(max(0, removeclump[i]), max(0, removeclump1[cs - i - 1]));
        }

        solutions.push_back(sum);
    }

    for (int i: solutions) {
        cout << i << endl;
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...