Submission #1153841

#TimeUsernameProblemLanguageResultExecution timeMemory
1153841byunjaewooElection (BOI18_election)C++20
0 / 100
13 ms16916 KiB
#include <bits/stdc++.h> #define int long long using namespace std; const int N=500010, S=(1<<19); int n, q, a[N]; string s; template<bool op> class seg { public: void init() {init(1, 0, S-1);} pair<int, int> query(int l, int r) {return query(1, 0, S-1, l, r);} private: pair<int, int> tree[2*S]; void init(int node, int s, int e) { if(s==e) { if(s<=n) tree[node]={a[s], s}; return; } int lch=2*node, rch=lch+1, m=(s+e)/2; init(lch, s, m), init(rch, m+1, e); if(op) tree[node]=min(tree[lch], tree[rch]); else tree[node]=max(tree[lch], tree[rch]); } pair<int, int> query(int node, int s, int e, int l, int r) { if(l<=s && e<=r) return tree[node]; int lch=2*node, rch=lch+1, m=(s+e)/2; if(r<=m) return query(lch, s, m, l, r); if(l>m) return query(rch, m+1, e, l, r); if(op) return min(query(lch, s, m, l, r), query(rch, m+1, e, l, r)); else return max(query(lch, s, m, l, r), query(rch, m+1, e, l, r)); } }; seg<0> Tmx; seg<1> Tmn; signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cin>>n>>s; for(int i=1; i<=n; i++) a[i]=a[i-1]+((s[i-1]=='C')?1:-1); Tmx.init(), Tmn.init(); cin>>q; while(q--) { int l, r; cin>>l>>r; pair<int, int> mx=Tmx.query(l-1, r), mn=Tmn.query(l-1, r); if(mx.second<mn.second) cout<<max(mx.first-a[r], a[l-1]-mn.first)<<"\n"; else cout<<mx.first-a[r]+a[l-1]-mn.first<<"\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...