版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zz_ylolita/article/details/52175615
头尾两个指针扫就可以了,注意ans非常大,要用long long ,输入输出要配套
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
int T,n,m,k,x,s,i,j;
long long ans;
int a[200010];
int main()
{
scanf("%d", &T);
while (T--)
{
scanf("%d%d%d", &n, &m, &k);
memset(a,sizeof(a),0);
for (int i=1;i<=n;i++)
{
scanf("%d", &x);
if (x>=m) a[i]=1; else a[i]=0;
}
ans=0;
s=a[1];i=1;j=1;
while (i<=j && j<=n)
{
if (s>=k)
{
ans+=(n-j+1);
s-=a[i];
i++;
}
while (s<k && j<=n) {j++;s+=a[j];}
}
printf("%I64d\n", ans);
}
}