#include<bits/stdc++.h>
#define ll long long 
#define F first 
#define S second 
using namespace std;
struct BIT{
    ll val[400010];
    void init(){
        for(int i=1;i<=400005;i++)val[i]=0;
    }
    void modify(int p,ll x){
        while(p<400005){
            val[p]+=x;
            p+=p&(-p);
        }
    }
    ll query(int p){
        ll ans=0;
        while(p){
            ans+=val[p];
            p-=p&(-p);
        }
        return ans;
    }
}bit;
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    ll ans=0;
    int n;
    cin>>n;
    vector<int> tp,o,x;
    for(int i=1;i<=n*2;i++){
        char c;
        cin>>c;
        if(c=='W'){
            tp.push_back(i);
        }else{
            x.push_back(i);
        }
    }
    for(auto u:tp)o.push_back(u);
    for(auto u:tp)o.push_back(u);
    map<int,ll> mp;
    auto cal=[&](int i){
        if(mp.count(i)){
            return mp[i];
        }
        vector<pair<int,int>> op;
        for(int j=0;j<n;j++){
            int a=x[j],b=o[i+j];
            //cout<<"pair "<<a<<" "<<b<<'\n';
            if(a>b)swap(a,b);
            op.push_back({a,b});
        }
        sort(op.begin(),op.end());
        reverse(op.begin(),op.end());
        bit.init();
        ll now=0;
        queue<int> q;
        for(auto [a,b]:op){
            now+=bit.query(b);
            bit.modify(b+1,-1);
            bit.modify(a,1);
        }
        mp[i]=now;
        //cout<<i<<" "<<now<<"\n";
        return now;
    };
    int l=0,r=n-1,rv=(cal(0)<cal(1)),water=cal(0);
    while(l!=r){
        int m=(l+r)>>1;
        if(cal(m)<water){
            if(rv){
                l=m+1;
            }else{
                r=m-1;
            }
        }else{
            if(cal(m)<cal(m+1))l=m+1;
            else r=m;
        }
    }
    cout<<cal(l)<<"\n";
    return 0;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |