Submission #1138901

#TimeUsernameProblemLanguageResultExecution timeMemory
1138901woohyun_jngElection (BOI18_election)C++20
100 / 100
392 ms40728 KiB
#include <bits/stdc++.h> #define int long long #define MAX 600000 using namespace std; typedef array<int, 4> tp; tp merge(tp X, tp Y) { tp res = { X[0] + Y[0], max(X[1], X[0] + Y[1]), max(Y[2], X[2] + Y[0]), max({X[1] + Y[2], X[3] + Y[0], X[0] + Y[3]})}; return res; } int A[MAX]; tp tree[MAX * 4]; void init(int n, int s, int e) { if (s == e) tree[n] = { A[s], max(0ll, A[s]), max(0ll, A[s]), max(0ll, A[s])}; else { int m = s + e >> 1; init(n << 1, s, m), init(n << 1 | 1, m + 1, e); tree[n] = merge(tree[n << 1], tree[n << 1 | 1]); } } tp query(int n, int s, int e, int l, int r) { if (r < s || e < l) return {0, 0, 0, 0}; else if (l <= s && e <= r) return tree[n]; else { int m = s + e >> 1; return merge( query(n << 1, s, m, l, r), query(n << 1 | 1, m + 1, e, l, r)); } } signed main() { ios_base::sync_with_stdio(false); cin.tie(0), cout.tie(0); int N, Q, L, R; tp res; string S; cin >> N >> S; for (int i = 1; i <= N; i++) A[i] = S[i - 1] == 'T' ? 1 : -1; init(1, 1, N); cin >> Q; while (Q--) { cin >> L >> R, res = query(1, 1, N, L, R); cout << res[3] << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...