Submission #617723

#TimeUsernameProblemLanguageResultExecution timeMemory
617723BlagojceElection (BOI18_election)C++11
0 / 100
8 ms380 KiB
#include <iostream> #include <algorithm> #include <vector> #include <map> #include <queue> #include <set> #include <unordered_map> #include <unordered_set> #include <string> #include <string.h> #include <bitset> #include <numeric> #include <utility> #define fr(i, n, m) for(int i = (n); i <= (m); i ++) #define pb push_back #define st first #define nd second #define pq priority_queue #define all(x) begin(x), end(x) using namespace std; typedef long long ll; typedef long double ld; typedef pair<int,int> pii; const int mxn = 2e5; const ll mod = 998244353; const ll inf = 1e18; int n; string s; int pref[mxn]; int suff[mxn]; pair<int,int> q_prefix(int l, int r){ int mi = 0; int id = l-1; for(int i = l; i <= r; i ++){ if(pref[i] < mi){ mi = pref[i]; id = i; } } if(mi == 0) return {0, id}; return {pref[l-1] - mi,id}; } pair<int,int> q_suffix(int l, int r){ int mi = 0; int id = r+1; for(int i = r; i >= l; i --){ if(suff[i] < mi){ mi = suff[i]; id = i; } } if(mi == 0) return {0, id}; return {suff[r+1] - mi,id}; } int solve(int l, int r){ int RET = 0; pii A = q_prefix(l, r); pii B = q_suffix(l, r); if(A.st == 0) return B.st; if(B.st == 0) return A.st; pii C = q_suffix(A.nd+1, r); RET += C.st; pii D = q_suffix(l, A.nd); pii E = q_prefix(l, D.nd-1); RET += E.st; int REM1 = A.st - E.st; int REM2 = D.st - (suff[A.nd+1] + C.st); RET += max({0, REM1, REM2}); return RET; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n; cin >> s; fr(i, 1, n){ pref[i] = pref[i-1]; if(s[i-1] == 'C') pref[i] += 1; if(s[i-1] == 'T') pref[i] -= 1; } for(int i = n; i > 0; i --){ suff[i] = suff[i+1]; if(s[i-1] == 'C') suff[i] += 1; if(s[i-1] == 'T') suff[i] -= 1; } int Q; cin >> Q; fr(i, 1, Q){ int l, r; cin >> l >> r; cout<<solve(l, r)<<endl; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...