Bài longest strike trên codeforces?

Link bài ạ: Problem - 1676F - Codeforces

int main()
{
	int num, n, k;

	cin >> num;

	for (int i = 0; i < num; i++)
	{
		cin >> n >> k;

		map<int, int> cnt;

		cnt[3e8] = 0;

		for (int j = 0; j < n; j++)
		{
			int x;

			cin >> x;
			cnt[x]++;
		}

		bool broken = true;
		int l = -1, r = -1;
		int ans_l = -1, ans_r = -1, tracker;
		int curr = numeric_limits<int>::min();

		for (auto& p : cnt)
		{
			if (broken)
				tracker = p.first;

			if (p.second >= k && tracker == p.first)
			{
				if (broken)
				{
					l = p.first;
					r = p.first;
					tracker = l;
				}
				else
					r = p.first;

				broken = false;
			}
			else
			{
				if (!broken)
				{
					int diff = r - l;

					if (diff > curr)
					{
						curr = diff;
						ans_l = l;
						ans_r = r;
					}
				}

				broken = true;
			}

			tracker++;
		}

		//cout << "->";
		if (ans_l == -1)
			cout << -1;
		else
			cout << ans_l << " " << ans_r;

		cout << endl;
		cnt.clear();
	}
	return 0;
}

Ý tưởng của em là đếm tần suất của mỗi số bằng ordered map và tìm các khoảng thỏa đề bài bằng ngắt(khi tracker tăng dần nhưng không bằng giá trị hiện tại hoặc khi gặp 1 số không có tần số >=k). Sau đó, tìm khoảng rộng nhất.

Kết quả: 1, Thuật toán em chạy 2. :frowning:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?