Submission #469349

#TimeUsernameProblemLanguageResultExecution timeMemory
469349Drew_JJOOII 2 (JOI20_ho_t2)C++17
100 / 100
321 ms3052 KiB
#include <bits/stdc++.h>
using namespace std;

constexpr int MAX = 2e5 + 69;
constexpr int inf = 1e9 + 69;

int n, k;
char s[MAX];
int bit[3][MAX];

inline void add(int y, int x, int val)
{
	for (int i = x; i < MAX; i += (i & -i))
		bit[y][i] += val;
}

inline int sum(int y, int x)
{
	int res = 0;
	for (int i = x; i > 0; i -= (i & -i))
		res += bit[y][i];
	return res;
}

int main()
{
	ios :: sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);

	cin >> n >> k >> (s+1);

	for (int i = 1; i <= n; ++i)
	{
		if (s[i] == 'J') add(0, i, 1);
		if (s[i] == 'O') add(1, i, 1);
		if (s[i] == 'I') add(2, i, 1);
	}

	int res = inf;
	for (int i = 0; i <= n; ++i)
	{
		int x = i+1;
		for (int y = 0; y < 3; ++y)
		{
			int l = x, r = n+1;
			while (l < r)
			{
				int mid = (l + r) >> 1;
				if (sum(y, mid) - sum(y, x-1) < k) l = mid + 1;
				else r = mid;
			}
			x = l;
		}
		if (x == n+1) break;

		res = min(res, x-i - 3*k);
	}
	cout << (res == inf ? -1 : res) << '\n';

	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...