题意是说统计一个长度为n的字符串中至少有k个大于等于m的数的字串的个数。
如果输入的时候就直接将大于等于m的元素标记为1,小于的标记为0,则本题就是求含有至少k的1的连续字串的个数。
我用的尺取法。
AC代码
#include<iostream>
#include<stdio.h>
using namespace std;
int a[210000];
int main(){
int T,n,m,k;
cin>>T;
while(T--){
cin>>n>>m>>k;
for(int i=0;i<n;++i) scanf("%d",&a[i]);
int l = 0,r = 0,cnt = 0;
long long ans = 0;
while(r<n){
if(a[r] >= m)
cnt++;
if(cnt == k){
while(a[l] < m){
ans += n-r;
l++;
}
ans += n-r;
cnt--;
l++;
}
r++;
}
printf("%lld\n",ans);
}
return 0;
}