点击打开链接
// main.cpp
// test
//
// Created by 吴有堃 on 2017/9/11.
// Copyright © 2017年 吴有堃. All rights reserved.
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <cstring>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <queue>
#include <vector>
#define LL long long
#define inf 0x3f3f3f3f
#define mod 1e9+7
using namespace std;
const int maxn=1e4+5;
vector<LL> v;
LL sum[maxn];
int main()
{
int T,a,N,M,L;
scanf("%d",&T);
while (T--) {
v.clear();
scanf("%d %d %d",&N,&L,&M);
for(int i=1;i<=N;i++){
scanf("%d",&a);
sum[i]=sum[i-1]+a;
}
LL ans=0,l=1,r=L;
v.push_back(0);
while (r<=N) {
LL s=sum[r]-M;
int fr=upper_bound(v.begin(), v.end(), s)-v.begin();//返回一个迭代器,指向键值<=s的最后一个元素的后一个元素。
ans +=fr; //统计前缀贡献
//printf(“s:%d,fr:%d,ans:%d\n”,s,fr,ans);
int fl= lower_bound(v.begin(), v.end(), sum[l])-v.begin();//返回一个迭代器,指向键值>=sum[1]的第一个元素
v.insert(fl+v.begin(), sum[l]); //维护前缀数组
//printf(“fl:%d\n”,fl);
++l; ++r;
//printf(“l:%d, r:%d\n",l,r);
}
printf("%lld\n",ans);
}
return 0;
}