Submission #348611

#TimeUsernameProblemLanguageResultExecution timeMemory
348611parsabahramiElection (BOI18_election)C++17
100 / 100
663 ms21740 KiB
// Call my Name and Save me from The Dark #include <bits/stdc++.h> using namespace std; typedef long long int ll; typedef pair<int, int> pii; #define SZ(x) (int) x.size() #define F first #define S second #define lc id << 1 #define rc lc | 1 const int N = 5e5 + 10, MOD = 1e9 + 7; struct Nude { int pre, suff, ret, sum; friend Nude operator+(Nude x, Nude y) { if (x.ret == -MOD) return y; if (y.ret == -MOD) return x; return {max(x.pre, y.pre + x.sum), max(y.suff, x.suff + y.sum), max({x.pre + y.suff, y.ret + x.sum, x.ret + y.sum}), x.sum + y.sum}; } }; Nude seg[N << 2]; int n, q; char S[N]; void build(int id = 1, int l = 1, int r = n + 1) { if (r - l < 2) { if (S[l] == 'T') seg[id] = {1, 1, 1, 1}; else seg[id] = {0, 0, 0, -1}; return; } int mid = (l + r) >> 1; build(lc, l, mid); build(rc, mid, r); seg[id] = seg[lc] + seg[rc]; } Nude get(int ql, int qr, int id = 1, int l = 1, int r = n + 1) { if (qr <= l || r <= ql) return {-MOD, -MOD, -MOD, -MOD}; if (ql <= l && r <= qr) return seg[id]; int mid = (l + r) >> 1; return get(ql, qr, lc, l, mid) + get(ql, qr, rc, mid, r); } int main() { scanf("%d%s", &n, S + 1); build(); for (scanf("%d", &q); q; q--) { int l, r; scanf("%d%d", &l, &r); printf("%d\n", get(l, r + 1).ret); } return 0; }

Compilation message (stderr)

election.cpp: In function 'int main()':
election.cpp:49:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   49 |     scanf("%d%s", &n, S + 1);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~
election.cpp:51:15: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   51 |     for (scanf("%d", &q); q; q--) {
      |          ~~~~~^~~~~~~~~~
election.cpp:52:24: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   52 |         int l, r; scanf("%d%d", &l, &r);
      |                   ~~~~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...