双指针,如图
这样搞的话,i每轮只需要扫一遍就结束了,比较快
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
const long int N = 100007;
int main()
{
int test;
cin >> test;
int result[N];//放结果
for(int t = 0;t<test;t++)
{
long int n, l, r;
cin >> n >> l >> r;
long int q[N];
for (int i = 0; i < n; i++)
cin >> q[i];
long int sum = 0;
int suc = 0;
for (int i = 0, j = 0; i < n; i++)
{
sum += q[i];
while (sum > r )
{
sum -= q[j];
j++;
}
if (sum >= l && sum <= r)
{
suc++;
sum = 0;
j = i+1;
}
}
result[t] = suc;
}
for (int i = 0; i < test; i++)
cout << result[i] << endl;
return 0;
}