Submission #545762

#TimeUsernameProblemLanguageResultExecution timeMemory
545762Koosha_mvMonochrome Points (JOI20_monochrome)C++14
100 / 100
371 ms7772 KiB
#include <bits/stdc++.h> using namespace std; #define dbgv(v) cout<<#v<<" = "; f(i,0,v.size()) cout<<v[i]<<" "; cout<<endl #define dbga(a,x,y) cout<<#a<<" = "; f(i,x,y) cout<<a[i]<<" "; cout<<endl #define erorp(x) cout<<#x<<"={"<<(x.F)<<" , "<<x.S<<"}"<<endl #define eror(x) cout<<#x<<'='<<(x)<<endl #define f_(i,a,b) for(int i=a;i>=b;i--) #define f(i,a,b) for(int i=a;i<b;i++) #define nb(x) __builtin_popcount(x) #define all(v) v.begin(),v.end() #define bit(n,k) (((n)>>(k))&1) #define Add(x,y) x=(x+y)%mod #define maxm(a,b) a=max(a,b) #define minm(a,b) a=min(a,b) #define lst(x) x[x.size()-1] #define sz(x) int(x.size()) #define mp make_pair #define ll long long #define pb push_back #define S second #define F first const int N=4e5+99; int n,a[N],L[N],R[N],fenwik[N]; string s; vector<int> vec0,vec1; void add(int x, int val){ for (x++;x>0;x-=x&-x) fenwik[x]+=val; } int get(int x) { int res=0; for(x++;x<N;x+=x&-x) res+=fenwik[x]; return res; } bool check(int lx,int rx,int ly,int ry){ if(lx>rx) swap(lx,rx); if(ly>ry) swap(ly,ry); if(lx>ly) swap(lx,ly),swap(rx,ry); return ly<rx && rx<ry; } ll calc(int shift){ f(i,0,N) fenwik[i]=0; ll res=0; f(i,0,n){ L[i]=min(vec0[i],vec1[(i+shift)%n]); R[i]=max(vec0[i],vec1[(i+shift)%n]); a[L[i]]=i; a[R[i]]=i; } f(i,0,2*n){ if(L[a[i]]==i){ add(i,1); } else{ add(L[a[i]],-1); res+=get(L[a[i]]); } } return res; } int32_t main(){ ios:: sync_with_stdio(0), cin.tie(0), cout.tie(0); cin>>n>>s; f(i,0,2*n) if(s[i]==s[0]) vec0.pb(i); else vec1.pb(i); int l=-1,r=n-1; while(l+1<r){ int mid=(l+r)>>1; if(calc(mid)<calc(mid+1)){ l=mid; } else{ r=mid; } } cout<<calc(r); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...