5 条题解

  • 2
    @ 2025-11-16 1:09:53
    #include <stdio.h>
    #define N 100005
    int main() {
    	int t;
    	scanf("%d", &t);
    	while (t--) {
    		long long n, l, r;
    		scanf("%lld %lld %lld", &n, &l, &r);
    		long long pre[N] = {0};          //定义前缀和数组
    		for (int i = 1; i <= n; ++i) {
    			scanf("%lld", &pre[i]);
    			pre[i] += pre[i - 1];
    		}
    		long long ans = 0;
    		int start = 0;
    		for (int end = 1; end <= n; ++end) {
    			while (start < end && pre[end] - pre[start] > r) {
    				start++;
    			}
    			if (start < end && pre[end] - pre[start] >= l) {
    				ans++;
    				start = end;
    			}
    		}
    		printf("%lld\n", ans);
    	}
    	return 0;
    }
    
    • @ 2025-11-16 17:17:31

      用前缀和来判断哪一段在l~r范围里,在的话ans++不在的话递推

我叶梓楣也要成为duck大魔王!!!(2)

信息

ID
1206
时间
1000ms
内存
256MiB
难度
8
标签
(无)
递交数
167
已通过
20
上传者