双指针。
枚举右边界,符合条件时收缩左边界。
#include <iostream>
using namespace std;
const int N=10001000;
int a[N];
int main(void)
{
int n,x,i,l=0,r,res=0,ans=1e9,idx=-1;
cin>>n>>x;
for(i=1;i<=n;++i)
cin>>a[i];
for(r=1;r<=n;++r)
{
res+=a[r];
while(l<r&&res>=x)
{
if(r-l<ans)
{
ans=r-l;
idx=l;
}
res-=a[++l];
}
}
cout<<idx+1<<' '<<idx+ans;
return 0;
}

京公网安备 11010502036488号