最长含有不小于x的子数组

cs
#include <stdio.h>
int main() {
int n;
long long x, k; // x 和 k 可能很大,用 long long
scanf("%d %lld %lld", &n, &x, &k);
long long a[100005]; // 根据数据规模 n <= 10^5
for (int i = 0; i < n; i++) {
scanf("%lld", &a[i]);
}
int left = 0;
int count = 0; // 当前窗口内 >= x 的元素个数
int max_len = -1;
for (int right = 0; right < n; right++) {
// 扩展右边界
if (a[right] >= x) {
count++;
}
// 如果当前窗口内有效元素个数超过了 k,收缩左边界
while (count > k) {
if (a[left] >= x) {
count--;
}
left++;
}
// 如果当前窗口内有效元素个数正好是 k,更新最大长度
if (count == k) {
int current_len = right - left + 1;
if (current_len > max_len) {
max_len = current_len;
}
}
}
printf("%d\n", max_len);
return 0;
}