#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 4e5 + 6;
string s; int n,bi = 0, wi = 0, b[N],w[N],BIT[N];
void update(int id)
{
for(;id <= 2*n; id += (-id)&id) BIT[id] += 1;
}
int sum(int id)
{
int res = 0;
for(;id > 0; id -= (-id)&id) res += BIT[id];
return res;
}
int get(int l, int r)
{
return (sum(r) - sum(l-1));
}
int cal(int k)
{
vector<pair<int,int>> edge;
memset(BIT,0,sizeof(BIT));
for(int i = 0; i < n; i++)
{
int c = min(w[i],b[(i+k)%n]) , d = max(w[i],b[(i+k)%n]);
edge.push_back({c,d});
}
sort(edge.begin(),edge.end());
int res = 0;
for(auto [l,r] : edge)
{
//cout << l+1 <<' ' << r+1 << endl;
res += get(l+1,r+1);
update(r+1);
}
// cout << endl;
//cout << res;
return res;
}
main()
{
cin >> n >> s;
for(int i = 0; i < 2*n; i++)
{
if(s[i] == 'W') w[wi++] = i;
else b[bi++] = i;
}
//cout << cal(0) << endl;
int l = 0, r = n-1, ans = 0;
while(l <= r)
{
int mid = (l+r)/2;
int curr = cal(mid);
int prev = 0;
// cout << l <<' ' << r << ' ' << mid << endl;
if(mid - 1 >= 0)
{
prev = cal(mid-1);
}
ans = max(ans,curr);
if(prev >= curr)
{
r = mid - 1;
}
else l = mid + 1;
}
ans = max(ans,cal(0));
ans = max(ans,cal(n-1));
cout << ans;
}
Compilation message (stderr)
monochrome.cpp:41:2: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
41 | main()
| ^~~~
# | 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... |