Submission #802439

#TimeUsernameProblemLanguageResultExecution timeMemory
802439borisAngelovElection (BOI18_election)C++17
100 / 100
439 ms42816 KiB
#include <bits/stdc++.h> using namespace std; const int maxn = 500005; int n; string s; struct segment_tree { struct state { int sum; int max_pref; int max_suff; int ans; state() { sum = 0; max_pref = 0; max_suff = 0; ans = 0; } state(int _sum, int _max_pref, int _max_suff, int _ans) { sum = _sum; max_pref = _max_pref; max_suff = _max_suff; ans = _ans; } }; state tree[4 * maxn]; state combine(state left_child, state right_child) { state result; result.sum = left_child.sum + right_child.sum; result.max_pref = max(left_child.max_pref, left_child.sum + right_child.max_pref); result.max_suff = max(right_child.max_suff, right_child.sum + left_child.max_suff); result.ans = max(max(left_child.ans + right_child.sum, left_child.sum + right_child.ans), left_child.max_pref + right_child.max_suff); return result; } void build(int node, int l, int r) { if (l == r) { if (s[l] == 'T') { tree[node] = state(1, 1, 1, 1); } else { tree[node] = state(-1, 0, 0, 0); } return; } int mid = (l + r) / 2; build(2 * node, l, mid); build(2 * node + 1, mid + 1, r); tree[node] = combine(tree[2 * node], tree[2 * node + 1]); } state query(int node, int l, int r, int ql, int qr) { if (l > qr || r < ql) { return state(0, 0, 0, 0); } if (ql <= l && r <= qr) { return tree[node]; } int mid = (l + r) / 2; return combine(query(2 * node, l, mid, ql, qr), query(2 * node + 1, mid + 1, r, ql, qr)); } int query(int l, int r) { return query(1, 1, n, l, r).ans; } }; segment_tree tree; void fastIO() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); } int main() { fastIO(); cin >> n >> s; s = '#' + s; tree.build(1, 1, n); int q; cin >> q; while (q--) { int l, r; cin >> l >> r; cout << tree.query(l, r) << "\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...