题意:
解法:
枚举r,维护一个最小的l,满足sum[l,r]<=s,
此时[l+1,r],[l+2,r]...[r,r],一定也满足条件,
左端点取值[l,r],长度范围为[1,r-l+1],
设x=r-l+1,那么答案累加x*(x+1)/2.
code:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxm=3e5+5;
int sum[maxm];
int a[maxm];
int n,s;
int cal(int n){
return n*(n+1)/2;
}
void solve(){
cin>>n>>s;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int l=1;
int sum=0;
int ans=0;
for(int i=1;i<=n;i++){
sum+=a[i];
while(sum>s)sum-=a[l++];
ans+=cal(i-l+1);
}
cout<<ans<<endl;
}
signed main(){
ios::sync_with_stdio(0);cin.tie(0);
solve();
return 0;
}