/*二分答案 这个题目要求“体力和最小的那个小组的所有人的体力和尽量大” 很明显我们二分最小体力 如果合法 逐渐放大 但是这里我们二分的是最小而不是最大所以累加的体力>=ans时 跳过当前体力i (可以认为把他归给了上一组)累加和=0 继续分组 */#include#include #include #define ll long long#define maxn 30010#define inf 1000000000using namespace std;ll n,m,ans,a[maxn];bool can(ll x){ ll tot=0,s=0; for(int i=1;i<=n;i++) if(s+a[i] =m)return 1; else return 0;}int main(){ scanf("%lld%lld",&n,&m); for(int i=1;i<=n;i++) scanf("%lld",&a[i]); ll l=0,r=inf; while(l<=r) { ll mid=(l+r)/2; if(can(mid)) { l=mid+1; ans=mid; } else r=mid-1; } printf("%lld\n",ans); return 0;}