tracker2026.02.23小红统计区间(easy)双指针

小红统计区间(easy)
题目大意是找到有多少个区间满足区间内的和大于等于k。
这种统计合法区间的题很容易想到双指针。如果当目前的l到r之间的和已经大于等于k,那么再往后加入新的元素肯定也是满足和大于等于k的。
所以可以用双指针维护,当目前的区间满足条件的话往后的都可以被统计到答案里面去,而不需要r指针真的一个个跑到底,不然的话时间复杂度就退化成n²了。

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e5+100;
int n,k;
int a[N];
signed main()
{
    cin>>n>>k;
    for(int i = 1 ; i <= n ; ++i)cin>>a[i];
    int sum = 0,ans = 0;
    int l = 0,r = 0;
    while(l <= n)
    {
        sum-=a[l];l++;
        while(sum < k && r <= n)
        {
            r++;
            sum += a[r];
        }
        if(r > n)break;
//         cout<<l<<" "<<r<<endl;
        ans += n-r+1;
    }
    cout<<ans<<endl;
    return 0;
}
posted on 2026-02-24 11:25  钟一一  阅读(10)  评论(0)    收藏  举报