Submission #1137357

#TimeUsernameProblemLanguageResultExecution timeMemory
1137357vuavisaoElection (BOI18_election)C++20
0 / 100
1 ms576 KiB
#include <bits/stdc++.h> #pragma GCC optimize("O3", "unroll-loops") using namespace std; using ll = long long; const int N = 500'000 + 10; struct RMQ { int n, Lg; int specialValue; vector<vector<int>> rmq; function<int(int, int)> comb; RMQ() {}; RMQ(int _n, function<int(int, int)> _comb) : n(_n), comb(_comb) { assert(comb); Lg = __lg(n); rmq.resize(Lg + 5, vector<int>(n + 10, 0)); }; RMQ(int _n, int a[], function<int(int, int)> _comb) : n(_n), comb(_comb) { assert(comb); Lg = __lg(n); assert((1 << (Lg + 1)) > n); rmq.resize(Lg + 5, vector<int>(n + 10, 0)); apply(a); }; void apply(int a[]) { for (int i = 1; i <= n; ++ i) rmq[0][i] = a[i]; for (int lg = 1; lg <= Lg; ++ lg) { for (int i = 1; i + (1 << lg) - 1 <= n; ++ i) { rmq[lg][i] = comb(rmq[lg - 1][i], rmq[lg - 1][i + (1 << (lg - 1))]); } } } int getRmq(int l, int r) { if (l > r) return specialValue; int k = 31 - __builtin_clz(r - l + 1); return comb(rmq[k][l], rmq[k][r - (1 << k) + 1]); } void walk_on_rmq() { // custom } void setSpecialValue(int val) { specialValue = val; } }; int minComb(int lhs, int rhs) { return min(lhs, rhs); } int maxComb(int lhs, int rhs) { return max(lhs, rhs); } int gcdComb(int lhs, int rhs) { return __gcd(lhs, rhs); } int n, q; string s; pair<int, int> qq[N]; int mark[N]; int pred[N]; int res[N]; void solve() { cin >> n >> s; for (int i = 1; i <= n; ++i) { mark[i] = (s[i - 1] == 'C' ? 1 : -1); } cin >> q; for (int i = 1; i <= q; ++i) { auto& [l, r] = qq[i]; cin >> l >> r; } fill(res + 1, res + 1 + n, true); for (int turn = 0; turn < 2; ++turn) { for (int i = 1; i <= n; ++i) { pred[i] = pred[i - 1] + mark[i]; } RMQ rmq(n, pred, minComb); for (int i = 1; i <= q; ++i) { auto& [l, r] = qq[i]; res[i] = max(res[i], max(0, pred[l - 1] - rmq.getRmq(l, r))); l = n - l + 1; r = n - r + 1; swap(l, r); } reverse(mark + 1, mark + 1 + n); } for (int i = 1; i <= q; ++i) cout << res[i] << '\n'; } int32_t main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); std::cout.tie(nullptr); // int t; cin >> t; int t = 1; while (t-- > 0) { solve(); // cout << '\n'; } return (0 ^ 0); } /// Code by vuavisao
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...