Submission #570117

#TimeUsernameProblemLanguageResultExecution timeMemory
570117PanTkdElection (BOI18_election)C++17
100 / 100
1420 ms44364 KiB
// // main.cpp // // Created by Panagiotis Chadjicostas on // Copyright © Panagiotis Hadjicostas. All rights reserved. // #include <iostream> #include <algorithm> #include <bitset> #include <complex> #include <deque> #include <fstream> #include <iomanip> #include <iterator> #include <limits> #include <list> #include <cstring> #include <map> #include <queue> #include <set> #include <stack> #include <string> #include <vector> #include <unordered_map> using namespace std; typedef long long ll; typedef vector<ll> vi; typedef pair<ll,ll> ii; #define fo(i,a,b) for(int i = a; i<=b; i++) #define f(i,b) for(int i=0;i<b;i++) #define F first #define S second #define sz size #define ls s,m,idx<<1 #define rs m+1,e,idx<<1|1 const ll MOD=ll(1e9)+7; const ll MAXN=2*ll(1e6); void checker(){ ll n=rand()%20+2; vi a(n,ll()); for(ll i=0;i<n;i++){ a[i]=rand()%20+2; } for(ll b=0;b<(1<<n);b++){ vi on,off; for(ll i=0;i<n;i++){ if(i&(1<<i)){ on.push_back(i); } else{ off.push_back(i); } } } } /////////////////////////////////////////////////////////////////////// struct ss{ ll pr=0,sf=0,s=0,ans=0; }; ss seg[2000002]; ss miden; ss push(ss a,ss b){ ss cc; cc.pr=max(a.pr,a.s+b.pr); cc.sf=max(b.sf,b.s+a.sf); cc.s=a.s+b.s; cc.ans = max(a.pr+b.sf, max(a.ans+b.s, b.ans+a.s)); return cc; } void update(ll idx,ll s,ll e,ll u,ll val){ if(s==e){ seg[idx].pr = max(seg[idx].pr, val); seg[idx].sf = max(seg[idx].sf, val); seg[idx].s += val; seg[idx].ans = ((val == -1) ? 0 : 1); return; } ll m=(s+e)>>1; if(u<=m){ update(idx<<1,s,m,u,val); } else{ update(idx<<1|1,m+1,e,u,val); } seg[idx]=push(seg[idx<<1],seg[idx<<1|1]); } ss query(ll idx,ll s,ll e,ll qs,ll qe){ if(s>qe||e<qs) return miden; if(s>=qs&&e<=qe){ return seg[idx]; } ll m=(s+e)>>1; ss q1=query(idx<<1,s,m,qs,qe); ss q2=query(idx<<1|1,m+1,e,qs,qe); return push(q1,q2); } void solve(){ ll n;cin>>n; string s;cin>>s; s=' '+s; for(ll i=1;i<=n;i++){ update(1, 1, n, i, ((s[i] == 'C') ? -1 : 1)); } ll q;cin>>q; while(q--){ ll l,r;cin>>l>>r; cout<<query(1,1,n,l,r).ans<<endl; } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); ll t=1;//cin>>t; while (t--) { solve(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...