#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
#define MAX 100000+10
int sum[MAX];
int nearS = 100000000+10;
int upper_bound(int L, int R, int x)
{
int left = L, right = R, mid;
while (left < right)
{
mid = (left+right)/2;
if (sum[mid] > x)
right = mid;
else
left = mid+1;
}
return left;
}
int main()
{
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
int N, M;
scanf("%d %d", &N, &M);
for (int i = 1; i <= N; i++)
{
scanf("%d", &sum[i]);
sum[i] += sum[i-1];
}
for (int i = 1; i <= N; i++)
{
int j = upper_bound(i, N+1, sum[i-1]+M);
if (sum[j-1] - sum[i-1] == M)
{
nearS = M;
break;
}
else if (j <= N && sum[j]-sum[i-1] < nearS)
{
nearS = sum[j] - sum[i-1];
}
}
for (int i = 1; i <= N; i++)
{
int j = upper_bound(i, N+1, nearS+sum[i-1]);
if (sum[j-1] - sum[i-1] == nearS)
printf("%d-%d\n", i, j-1);
}
return 0;
}
PAT-A1044. Shopping in Mars (25)
最新推荐文章于 2020-07-21 15:20:17 发布