#include <iostream>
#include <cstdio>
#include <algorithm>
#include<cstring>
using namespace std;
#define N 500005
typedef long long ll;
int num[N];
int a[85],b[85];
int main()
{
int i,j,n,t,k,cnta,cntb;
ll res;
scanf("%d",&t);
while(t--&&scanf("%d%d",&n,&k)!=EOF)
{
res=0;
for(i=0;i<n;i++)
scanf("%d",num+i);
for(i=0;i<n;i++)//枚举第K大数
{
cnta=cntb=1;
int tp=num[i];
a[0]=b[0]=0;
for(j=i-1;j>=0;j--)
{
if(cnta>k)
break;
if(num[j]>tp)
a[cnta++]=i-j;
}
if(j<=0)
a[cnta]=i+1;
for(j=i+1;j<n;j++)
{
if(cntb>k)
break;
if(num[j]>tp)
b[cntb++]=j-i;
}
if(j>=n)
b[cntb]=n-i;
for(int ii=0;ii<cnta;ii++)
{
int tp1,tp2;
if(k-ii-1>=cntb)
continue;
tp1=a[ii+1]-a[ii];
tp2=b[k-ii]-b[k-ii-1];
res+=(ll)num[i]*tp1*tp2;
}
}
printf("%lld\n",res);
}
return 0;
}
hdu 6058 暴力枚举
最新推荐文章于 2019-09-21 14:22:06 发布