Submission #571644

#TimeUsernameProblemLanguageResultExecution timeMemory
571644ntttElection (BOI18_election)C++14
0 / 100
2 ms340 KiB
#include<bits/stdc++.h> using namespace std; #define MASK(i) (1LL << (i)) #define BIT(x, i) ((x >> (i)) & 1) #define fi first #define se second #define ll long long #define task "name" const int oo = 1e9 + 7; const ll loo = (ll)1e18 + 7; const int MOD = 1e9 + 7; const int N = 5e5 + 3; const int BASE = 10; template <typename T1, typename T2> bool minimize(T1 &a, T2 b) { if (a > b) {a = b; return true;} return false; } template <typename T1, typename T2> bool maximize(T1 &a, T2 b) { if (a < b) {a = b; return true;} return false; } struct nodes { int sum = 0; int pr = 0; int sf = 0; int ans = 0; } node[4 * N], base; int n; string s; nodes add(nodes a, nodes b) { nodes c; c.sum = a.sum + b.sum; c.pr = max(a.pr, a.sum + b.pr); c.sf = max(b.sf, b.sum + a.sf); // c.ans = max(a.sum + b.ans, a.ans + b.sum); // c.ans = max(c.ans, a.pr + b.sf); c.ans = max(a.pr + b.pr, a.sf + b.sf); return c; } void build(int id, int l, int r, int pos, int x) { if(l > r || pos < l || r < pos) return; if (l == r) { node[id].sum = x; maximize(node[id].pr, x); maximize(node[id].sf, x); maximize(node[id].ans, x); return; } int mid = (l + r)/2; build(id * 2, l, mid, pos, x); build(id * 2 + 1, mid + 1, r, pos, x); node[id] = add(node[id * 2], node[id * 2 + 1]); } nodes get(int id, int l, int r, int u, int v) { if (r < u || v < l) return base; if (u <= l && r <= v) return node[id]; int mid = (l + r)/2; return add(get(id * 2, l, mid, u, v), get(id * 2 + 1, mid + 1, r, u, v)); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //freopen(task".inp" , "r" , stdin); //freopen(task".out" , "w" , stdout); cin >> n >> s; for (int i = 0; i < n; i++) { if(s[i] == 'T') build(1, 1, n, i + 1, 1); else build(1, 1, n, i + 1, -1); } int q; cin >> q; while(q--) { int l, r; cin >> l >> r; cout << get(1, 1, n, l, r).ans << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...