Submission #566117

#TimeUsernameProblemLanguageResultExecution timeMemory
566117birthdaycakeElection (BOI18_election)C++17
100 / 100
379 ms26752 KiB
#include<bits/stdc++.h> #define endl '\n' #define mod 1000000007 #define boost ios_base::sync_with_stdio(false), cin.tie(NULL); using namespace std; int N,Left,Right; struct node{ int mxp, mxs, tot, ans; }; node seg[2000001]; vector<node>ans; void Query(int l = 1, int r = N, int ind = 1){ if(l > Right || r < Left) return; if(l >= Left && r <= Right){ ans.push_back(seg[ind]); return; } int mid = (l + r) /2; Query(l, mid, ind * 2); Query(mid + 1, r, ind * 2 + 1); } signed main(){ boost; int n; cin >> n; string a; cin >> a; N = exp2(ceil(log2(n))); for(int i = 0; i < a.size(); i++){ seg[i + N].tot = (a[i] == 'C' ? -1 : 1); if(seg[i + N].tot == 1) seg[i + N].ans = seg[i + N].mxs = seg[i + N].mxp = seg[i + N].tot; } for(int i = N - 1 ; i > 0; i--){ seg[i].tot = seg[i * 2].tot + seg[i * 2 + 1].tot; seg[i].mxp = max(seg[i * 2].mxp, seg[i * 2].tot + seg[i * 2 + 1].mxp); seg[i].mxs = max(seg[i * 2 + 1].mxs, seg[i * 2 + 1].tot + seg[i * 2].mxs); seg[i].ans = max({seg[i * 2].mxp + seg[i * 2 + 1].mxs, seg[i * 2].ans + seg[i * 2 + 1].tot, seg[i * 2 + 1].ans + seg[i * 2].tot}); } int q; cin >> q; while(q--){ cin >> Left >> Right; int as = 0, mxp = 0, mxs = 0, t = 0; Query(); for(int i = 0; i < ans.size(); i++){ as = max({mxp + ans[i].mxs, t + ans[i].ans, as + ans[i].tot}); mxp = max(mxp, t + ans[i].mxp); mxs = max(mxs + ans[i].tot, ans[i].mxs); t += ans[i].tot; } cout << as << endl; ans.clear(); } return 0; }

Compilation message (stderr)

election.cpp: In function 'int main()':
election.cpp:47:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   47 |     for(int i = 0; i < a.size(); i++){
      |                    ~~^~~~~~~~~~
election.cpp:63:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<node>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   63 |         for(int i = 0; i < ans.size(); i++){
      |                        ~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...