Problem Description
Give you an array A[1..n]of length n.
Let f(l,r,k) be the k-th largest element of A[l..r].
Specially , f(l,r,k)=0 if r−l+1
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=5e5+5;
int l[maxn],r[maxn],cntl,cntr,a[maxn];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,k;
ll ans=0;
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
{
cntl=cntr=1;
int j;
for(j=i+1;j<=n;j++)
{
if(cntr>k)
break;
if(a[j]>a[i])
r[cntr++]=j-i;
}
if(j>n)
r[cntr]=n-i+1;
for(j=i-1;j>=1;j--)
{
if(cntl>k)
break;
if(a[j]>a[i])
l[cntl++]=i-j;
}
if(j<=1)l[cntl]=i;
for(j=0;j<cntl;j++)
{
if(k-j-1>=cntr)
continue;
ll _n=l[j+1]-l[j];
ll _m=r[k-j]-r[k-j-1];
ans+=(ll)_n*_m*a[i];
}
}
printf("%lld\n",ans);
}
return 0;
}