题解:CF1973B Cat, Fox and the Lonely Array
- 给定一个长度为
n 的数组a ,求最小的k 使得对于任意两个正整数i, j \in [1, n - k + 1] 都满足\operatorname{or}_{t=i}^{i+k-1} a_t = \operatorname{or}_{t=j}^{j+k-1} a_t 。
一种
我们考虑
所以我们需要考虑的就是那些二进制位
所以我们需要的就是对于所有
例如所有
显然如果
所以
int n, a[N];
vector<int> s[30];
void Luogu_UID_748509() {
for (int i = 0; i < 20; ++ i ) s[i].clear();
fin >> n;
for (int j = 0; j < 20; ++ j ) s[j].push_back(0);
for (int i = 1; i <= n; ++ i ) {
fin >> a[i];
for (int j = 0; j < 20; ++ j )
if (a[i] >> j & 1) s[j].push_back(i);
}
for (int j = 0; j < 20; ++ j ) s[j].push_back(n + 1);
int res = 0;
for (int i = 0; i < 20; ++ i )
if (s[i].size() > 2) for (int a = 0, b = 1; b < s[i].size(); ++ a, ++ b )
res = max(res, s[i][b] - s[i][a]);
if (res == 0) res = 1;
fout << res << '\n';
}