#include<bits/stdc++.h>
#define ll long long
#define F first
#define S second
using namespace std;
struct BIT{
ll val[4010];
void init(){
for(int i=1;i<=4005;i++)val[i]=0;
}
void modify(int p,ll x){
while(p<4005){
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);
for(int i=0;i<n;i++){
if(i<n-1){
int a1=x[0],a2=o[i],b1=x[n-1-i],b2=o[n-1];
if(min(a1,a2)>max(b1,b2)||max(a1,a2)<min(b1,b2))continue;
}
// if(i>0){
// int a1=x[n-i],a2=o[n],b1=x[n-1],b2=o[n-1+i];
// if(min(a1,a2)>max(b1,b2)||max(a1,a2)<min(b1,b2))continue;
// }
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);
}
//cout<<i<<" "<<now<<"\n";
ans=max(ans,now);
}
cout<<ans<<"\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... |