Submission #1232896

#TimeUsernameProblemLanguageResultExecution timeMemory
1232896AdnanboiElection (BOI18_election)C++20
0 / 100
1 ms576 KiB
#include <bits/stdc++.h>

using namespace std;

const int MOD = 1e9 + 7;

int lg2[500005];
vector<vector<int> > stF, stB;
vector<int> P, PR;

int rmq(const vector<vector<int> >& st, int L, int R){
    int j = lg2[R - L + 1];
    return min(st[j][L], st[j][R - (1 << j) + 1]);
}

void solve(){
    int N; string S;
    cin>>N>>S;
    P.assign(N + 1, 0);
    PR.assign(N + 2, 0);
    for(int i = 1; i <= N; i++){
        P[i] = P[i - 1]+(S[i - 1] == 'C' ? 1 : -1);
    }
    for(int i = N; i>= 1; i--){
        PR[N - i + 1] = PR[N - i] + (S[i - 1] == 'C' ? 1 : -1);
    }
    lg2[1] = 0;
    for(int i = 2; i<= N; i++) lg2[i] = lg2[i / 2] + 1;
    int K = lg2[N] + 1;
    stF.assign(K, vector<int>(N + 1));
    stB.assign(K, vector<int>(N + 1));
    for(int i = 1; i<= N; i++){
        stF[0][i] = P[i];
        stB[0][i] = PR[i];
    }
    for(int j = 1; j < K; j++){
        for(int i = 1; i + (1 << j) - 1 <= N; i++){
            stF[j][i] = min(stF[j - 1][i], stF[j - 1][i + (1 << (j - 1))]);
            stB[j][i] = min(stB[j - 1][i], stB[j - 1][i + (1 << (j - 1))]);
        }
    }
    int Q; 
    cin>>Q;
    while(Q--){
        int L, R; 
        cin>>L>>R;
        int baseF = P[L - 1];
        int mnF = rmq(stF, L, R);
        int delF = max(0, baseF-mnF);
        int Lp = N - R + 1, Rp = N - L + 1;
        int baseB = PR[Lp - 1];
        int mnB = rmq(stB, Lp, Rp);
        int delB = max(0, baseB - mnB);
        cout<<max(delF, delB)<<"\n";
    }
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int t = 1;
    //cin>>t;
    while(t--){
        solve();
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...