Submission #1326405

#TimeUsernameProblemLanguageResultExecution timeMemory
1326405JuanJLMonochrome Points (JOI20_monochrome)C++20
35 / 100
2095 ms33592 KiB
#include <bits/stdc++.h> #define fst first #define snd second #define pb push_back #define SZ(x) (int)x.size() #define ALL(x) x.begin(),x.end() #define forn(i,a,b) for(int i = a; i<b; i++) #define mset(a,v) memset(a,v,sizeof(a)) using namespace std; typedef long long ll; ll n; struct STree{ ll n; vector<ll> st; STree(ll n):n(n),st(4*n+5) {} void upd(ll k , ll l, ll r, ll p, ll v){ if(l+1==r){ st[k]=v; return; } ll mid = (l+r)/2; if(mid>p) upd(2*k,l,mid,p,v); else upd(2*k+1,mid,r,p,v); st[k]=st[2*k]+st[2*k+1]; } ll qry(ll k, ll l, ll r, ll L, ll R){ if(l>=R || r<=L) return 0; if(l>=L && r<=R) return st[k]; ll mid = (l+r)/2; return qry(2*k,l,mid,L,R)+qry(2*k+1,mid,r,L,R); } void upd(ll p, ll v){ upd(1,0,n,p,v); } ll qry(ll l, ll r){ return qry(1,0,n,l,r); } }; int main(){ cin>>n; string s; cin>>s; vector<ll> b; vector<ll> w; forn(i,0,2*n){ if(s[i]=='B'){ b.pb(i); }else{ w.pb(i); } } ll res = 0; forn(k,0,n){ ll cnt = 0; vector<pair<pair<ll,ll>,ll>> line; forn(i,0,SZ(b)){ ll j=k; line.pb({{b[i],w[j]},0}); k++; k%=n; } forn(i,0,SZ(line)){ line[i].snd=i; if(line[i].fst.fst>line[i].fst.snd) swap(line[i].fst.fst,line[i].fst.snd); } sort(ALL(line)); vector<pair<ll,ll>> inp; forn(i,0,SZ(line)) inp.pb({line[i].fst.fst, i}); vector<pair<ll,ll>> out; forn(i,0,SZ(line)) out.pb({line[i].fst.snd, i}); sort(ALL(inp)); reverse(ALL(inp)); sort(ALL(out)); reverse(ALL(out)); STree st(2*n); cnt=0; forn(i,0,2*n){ while(!inp.empty() && inp.back().fst<=i){ st.upd(inp.back().fst,1); inp.pop_back(); } while(!out.empty() && out.back().fst<=i){ cnt+=st.qry(line[out.back().snd].fst.fst+1, line[out.back().snd].fst.snd+1); st.upd(line[out.back().snd].fst.fst,(ll)0); out.pop_back(); } } res=max(res,cnt); } cout<<res<<'\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...