#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define pii pair<int, int>
#define f first
#define s second
#define all(v) v.begin(), v.end()
#define int ll
struct segTreeSum
{
vector<ll> tree;
int sz;
void init(int n)
{
sz = n;
tree.resize(2 * sz);
}
void build(vector<int> &a)
{
init(a.size());
for (int i = 0; i < a.size(); ++i)
tree[i + sz] = a[sz];
for (int i = sz - 1; i > 0; --i)
tree[i] = tree[i << 1] + tree[(i << 1) + 1];
}
int get(int l, int r) // [l, r)
{
l += sz;
r += sz;
int res = 0;
while (l < r)
{
if (l & 1)
res += tree[l++];
if (r & 1)
res += tree[--r];
l >>= 1;
r >>= 1;
}
return res;
}
void add(int pos, int val)
{
pos += sz;
tree[pos] += val;
pos >>= 1;
while (pos)
{
tree[pos] = tree[pos << 1] + tree[(pos << 1) + 1];
pos >>= 1;
}
}
};
struct test
{
vector<int> b, w;
vector<int> dp;
int n;
ll solve(int k)
{
if (dp[k] != -1)
return dp[k];
segTreeSum tree;
tree.init(2 * n);
vector<pii> segs;
for (int i = 0; i < n; ++i)
segs.pb({min(b[i], w[(i + k) % n]), max(b[i], w[(i + k) % n])});
sort(all(segs), [](pii a, pii b)
{ return a.s < b.s; });
ll cnt = 0;
for (int i = 0; i < n; ++i)
{
auto [l, r] = segs[i];
cnt += tree.get(0, l + 1);
tree.add(l, 1);
tree.add(r, -1);
}
return dp[k] = cnt;
}
void solve()
{
cin >> n;
dp.resize(n, -1);
for (int i = 0; i < 2 * n; ++i)
{
char x;
cin >> x;
if (x == 'B')
b.pb(i);
else
w.pb(i);
}
int res = 0;
bool inverted = 0;
if (solve(n - 1) > solve(1))
inverted = 1;
// for (int i = 0; i < n; ++i)
// {
// cout << solve(i) << " ";
// }
// cout << "\n";
int L = 0, R = n;
auto getV = [&](int x) -> int
{ return inverted ? ((n - 1 - x + n) % n) : ((x + n) % n); };
while ((R - L) > 1)
{
// cerr << L << " " << R << "\n";
int M = (L + R) >> 1;
ll val = solve(getV(M));
if (val < solve(getV(0)))
R = M;
else if (solve(getV(M - 1)) <= val)
L = M;
else
R = M;
}
cout << solve(getV(L)) << "\n";
}
};
main()
{
test t;
t.solve();
}
컴파일 시 표준 에러 (stderr) 메시지
monochrome.cpp:142:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
142 | 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... |