如何使用二进制搜索解决以下问题?

How to solve following problem using binary search?

我们得到了一个整数数组,我们需要找到 size 的最小子段,这样在删除它之后数组中的所有元素都是不同的。如何使用二进制解决这个问题在 O(nlogn) 中搜索?我尝试阅读各种使用二进制搜索的提交,但我无法理解它们。

我的尝试 - 我使用蛮力在 n^2logn 中解决了这个问题,但我想知道如何应用二进制搜索来解决 O(nlogn) 中的这个问题。

Link 问题 - https://codeforces.com/contest/1208/problem/B

Link 实现二进制搜索的解决方案之一 -https://codeforces.com/contest/1208/submission/59494540

在链接的解决方案中,如果可以通过删除大小为 siz 的子数组使所有数字唯一,则函数 check(int siz) returns 为真。它在 O(n) 时间内完成。

由于 check(x) == true 意味着 check(y) == true 对于所有 y >= xmain() 函数可以进行二进制搜索以找到 siz 的最小值哪个check(siz) == true,哪个是问题的解

如果check(mid) == true,则答案不大于mid。如果 check(mid) == false,则答案大于 mid

二进制搜索需要 O(log n)check 的评估,总共 O(n log n) 时间。