Submission #1232903

#TimeUsernameProblemLanguageResultExecution timeMemory
1232903AdnanboiElection (BOI18_election)C++20
0 / 100
46 ms320 KiB
#include <bits/stdc++.h> using namespace std; const int MOD = 1e9 + 7; //ubit cu se void solve() { int n; cin>>n; string s; cin>>s; vector<int> pre(n + 1), suf(n + 2), cSum(n + 1), tSum(n + 1); for(int i = 0; i < n; i++){ cSum[i + 1] = cSum[i] + (s[i] == 'C'); tSum[i + 1] = tSum[i] + (s[i] == 'T'); pre[i + 1] = cSum[i + 1] - tSum[i + 1]; } for(int i = n - 1; i >= 0; i--){ suf[i + 1] = suf[i + 2] + (s[i] == 'C') - (s[i] == 'T'); } vector<int> bad_pre(n + 1, 0), bad_suf(n + 2, 0); for(int i = 1; i <= n; i++) bad_pre[i] = min(bad_pre[i - 1], pre[i]); for(int i = n; i >= 1; i--) bad_suf[i] = min(bad_suf[i + 1], suf[i]); int q; cin>>q; while (q--) { int l, r; cin>>l>>r; int totalC = cSum[r] - cSum[l - 1]; int totalT = tSum[r] - tSum[l - 1]; int low = 0, high = totalT, ans = totalT; while(low <= high){ int mid = (low + high) / 2; int c = 0, t = 0; vector<int> del; for(int i = l - 1; i < r && t < mid; i++){ if(s[i] == 'T'){ del.push_back(i); t++; } } vector<bool> skip(n, false); for (int x : del) skip[x] = true; bool valid = true; c = 0, t = 0; for(int i = l - 1; i < r; i++){ if(skip[i]) continue; if(s[i] == 'C') c++; else t++; if(c < t){ valid = false; break; } } c = 0, t = 0; for(int i = r - 1; i >= l - 1 && valid; i--){ if(skip[i]) continue; if(s[i] == 'C') c++; else t++; if(c < t){ valid = false; break; } } if(valid){ ans = mid; high = mid - 1; } else{ low = mid + 1; } } cout<<ans<<'\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...