Submission #1254032

#TimeUsernameProblemLanguageResultExecution timeMemory
1254032armashkaElection (BOI18_election)C++20
0 / 100
13 ms23872 KiB
#include <bits/stdc++.h> #define pb push_back #define all(v) v.begin(), v.end() #define sz(x) (int)(x).size() using namespace std; using ll = long long; using ld = long double; const int N = 1e6 + 5; const ll mod = 1e9 + 7; const ld eps = 1e-6; const ld Pi = acos(-1.0); int n, q; string s; int L[N], R[N]; int ans[N]; vector<pair<int, int>> g[N]; int t[N * 4]; void upd(int pos, int val, int v, int tl, int tr) { if (tl == tr) { t[v] += val; return; } int tm = (tl + tr) / 2; if (pos <= tm) upd(pos, val, v + v, tl, tm); else upd(pos, val, v + v + 1, tm + 1, tr); t[v] = t[v + v] + t[v + v + 1]; } int get(int l, int r, int v, int tl, int tr) { if (r < tl || tr < l) return 0; if (l <= tl && tr <= r) return t[v]; int tm = (tl + tr) / 2; return get(l, r, v + v, tl, tm) + get(l, r, v + v + 1, tm + 1, tr); } void solve() { cin >> n >> s; s = " " + s; stack<int> st; for (int i = 1; i <= n; ++i) { if (s[i] == 'C') { L[i] = i; st.push(i); } else { if (st.empty()) L[i] = 0; else { L[i] = st.top(); st.pop(); } } } while (sz(st)) st.pop(); for (int i = n; i >= 1; --i) { if (s[i] == 'C') { R[i] = i; st.push(i); } else { if (st.empty()) R[i] = n + 1; else { R[i] = st.top(); st.pop(); } } } for (int i = 1; i <= n; ++i) { g[R[i]].pb({L[i], 1}); } cin >> q; for (int i = 1; i <= q; ++i) { int l, r; cin >> l >> r; ans[i] = (r - l + 1); g[r].pb({l, -i}); } for (int i = 1; i <= n; ++i) { for (auto [x, type] : g[i]) { if (type == 1) upd(x, 1, 1, 1, n); else ans[-type] -= get(x, i, 1, 1, n); } } for (int i = 1; i <= q; ++i) cout << ans[i] << "\n"; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int tt = 1; // cin >> tt; for (int i = 1; i <= tt; ++i) { solve(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...