Submission #1255486

#TimeUsernameProblemLanguageResultExecution timeMemory
1255486Seyyed_Mojtaba_MortazaviMonochrome Points (JOI20_monochrome)C++20
35 / 100
338 ms5304 KiB
#include <bits/stdc++.h>

using namespace std;

#define int long long int
typedef pair <int, int> pii;

const int MAXN = 2e5 + 10;

vector <int> W;
vector <int> B;
vector <pii> seg;

struct Fenwick {

	int node[MAXN];

	void update(int n, int ind, int val)
	{
		for (; ind <= n; ind += ind & -ind)
			node[ind] += val;
	}

	int get(int ind)
	{
		int res = 0;
		for (; ind; ind -= ind & -ind)
			res += node[ind];
		return res;
	}

	int get(int l, int r)
	{
		return get(r) - get(l - 1);
	}

} Fen;

bool cmp(pii x, pii y)
{
	return x.second < y.second;
}

signed main()
{
	int n, ans = 0;
	cin >> n;
	for (int i = 1; i <= 2 * n; i++)
	{
		char c;
		cin >> c;
		if (c == 'W')
			W.push_back(i);
		else
			B.push_back(i);
	}
	for (int i = 1; i <= n; i++)
	{
		seg.clear();
		memset(Fen.node, 0, sizeof(Fen.node));
		for (int j = 0; j < n; j++)
		{
			int v = B[j];
			int u = W[(j + i) % n];
			seg.push_back({min(v, u), max(v, u)});
			Fen.update(2 * n, min(v, u), +1);
		}
		sort(seg.begin(), seg.end(), cmp);
		int tmp = 0;
		for (int j = 0; j < n; j++)
		{
			Fen.update(2 * n, seg[j].first, -1);
			tmp += Fen.get(seg[j].first, seg[j].second);
		}
		ans = max(ans, tmp);
	}
	cout << ans << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...