#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
using namespace std;
// 检查是否存在长度为length的子串,其和至少为m
bool checkLength(int length, const vector<int>& candies, long long m) {
int n = candies.size();
// 计算初始窗口(前length个元素)的和
long long window_sum = 0;
for (int i = 0; i < length; i++) {
window_sum += candies[i];
}
if (window_sum >= m) return true;
// 滑动窗口检查所有长度为length的子串
for (int i = length; i < n; i++) {
window_sum = window_sum - candies[i - length] + candies[i];
if (window_sum >= m) return true;
}
return false;
}
int main() {
int n;
long long m; // 使用long long防止大数溢出
cin >> n >> m;
vector<int> candies(n);
long long total = 0;
for (int i = 0; i < n; i++) {
cin >> candies[i];
total += candies[i];
}
// 如果总甜度小于m,直接输出0
if (total < m) {
cout << 0 << endl;
return 0;
}
int left = 1; // 最小可能长度
int right = n; // 最大可能长度
int result = n; // 记录最小满足条件的长度
// 二分查找最小满足条件的长度
while (left <= right) {
int mid = left + (right - left) / 2; // 防止溢出
if (checkLength(mid, candies, m)) {
result = mid; // 更新最小长度
right = mid - 1; // 尝试更小的长度
} else {
left = mid + 1; // 需要更大的长度
}
}
cout << result << endl;
return 0;
}
/**************************************************************
Problem: 2105
User: hulaoshi
Language: C++
Result: Accepted
Time:103 ms
Memory:2972 kb
****************************************************************/