#include <iostream>
#include <map>
using namespace std;
int sum[100010]={0};
map<int,int> ans;
int binarys(int left,int right,int x){
while(left<right){
int mid=(left+right)/2;
if(sum[mid]>=x) right=mid;
else left=mid+1; //
}
return left;
}
int main(){
int N,M;
scanf("%d%d",&N,&M);
for(int i=1;i<=N;i++){
scanf("%d",&sum[i]);
sum[i]+=sum[i-1];
}
int min=10000000;
for(int i=1;i<=N;i++){
int j=binarys(i,N,M+sum[i-1]);
if(sum[j]-sum[i-1]<M) continue;
if(sum[j]-sum[i-1]-M<min){
ans.clear();
ans[i]=j;
min=sum[j]-sum[i-1]-M;
}else if(sum[j]-sum[i-1]-M==min){
ans[i]=j;
}
}
for(map<int,int>::iterator it=ans.begin();it!=ans.end();it++){
printf("%d-%d\n",it->first,it->second);
}
return 0;
}
PAT A1044
最新推荐文章于 2022-03-15 20:26:09 发布