#include <cstdio>
int n, m;
int arr[100010];
int sum[100010];
int solve(int left, int right, int x){
int mid;
while(left < right){
mid = (left+right) / 2;
if(sum[mid] >= x){
right = mid;
}else{
left = mid + 1;
}
}
return left;
}
int main(){
scanf("%d %d", &n, &m);
sum[0] = 0;
arr[0] = 0;
for(int i=1; i<=n; i++){
scanf("%d", &arr[i]);
sum[i] = sum[i-1] + arr[i];
}
int min = 100000000;
int flag = 0;
for(int i=1; i<=n; i++){
int j = solve(i, n+1, sum[i-1]+m);
if(sum[j]-sum[i-1]==m){
printf("%d-%d\n", i, j);
flag = 1;
}else if(j < n+1){
if(sum[j]-sum[i-1] < min){
min = sum[j]-sum[i-1];
}
}
}
if(!flag){
for(int i=1; i<=n+1; i++){
int j = solve(i, n, min+sum[i-1]);
if(sum[j]-sum[i-1]==min){
printf("%d-%d\n", i, j);
}
}
}
return 0;
}
这题最重要的是要找到一个递增序列sum,然后就是找出sum[j]-sum[i-1]=m的关系就能解决了。