1044. Shopping in Mars (25)

#include <iostream>
#include <vector>

using namespace std;

struct node
{
	int begin, end;
};

vector<long long> v;

int getindex(int low, int high, long long goal)
{
	int mid;
	while(low < high)
	{
		mid = (low + high) / 2;
		if(v[mid] >= goal)
		{
			high = mid;
		}
		else
		{
			low = mid + 1;
		}
	}

	return high;
}

int main()
{
	int n;
	long long m;
	scanf("%d%lld", &n, &m);

	int i;
	long long num;

	v.push_back(0);
	for(i = 1; i <= n; i++)
	{
		scanf("%lld", &num);
		v.push_back(num + v[i - 1]);
	}

	int flag = 0, res, index;
	long long min = -1, cur;
	vector<node> vn[2];
	node nod;

	for(i = 1; i <= n; i++)
	{
		index = getindex(i, n + 1, m + v[i - 1]);

		if(index == n + 1)
		{
			break;
		}

		res = 0;
		cur = v[index] - v[i - 1];

		if(cur == m)
		{
			flag = res = 1;
		}
		else
		{
			if(flag == 0)
			{
				if(min == -1 || cur < min)
				{
					vn[0].clear();
					min = cur;
					res = 1;
				}
				else if(min == cur)
				{
					res = 1;
				}
			}
		}

		if(res == 1)
		{
			nod.begin = i;
			nod.end = index;

			vn[flag].push_back(nod);
		}
	}

	int size = vn[flag].size();
	for(i = 0; i < size; i++)
	{
		nod = vn[flag][i];
		printf("%d-%d\n", nod.begin, nod.end);
	}

	system("pause");
	return 0;
}

 

posted on 2025-11-23 17:06  王景迁  阅读(4)  评论(0)    收藏  举报

导航