1->n,计算最大字段和maxa[i] = max{maxa[i-1]+a[i], a[i]},对于maxa[i] > x的情况,进行一次操作cnt++,令maxa[i] = -INF。
这种做法可以保证前面遍历过的最大字段和<=x,同时尽量让后面的最大字段和变小,使得操作次数最少。
最终的答案需要考虑没有操作cnt==0时,有无maxa[i] == x,有输出0;没有输出1。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5+10;
ll n, x;
ll a[N], maxa[N];

void solve()
{
    ll cnt = 0;
    bool flag = false;
    cin>>n>>x;
    maxa[0] = -1e18;
    for (int i=1; i<=n; ++i)
    {
        cin>>a[i];
    }
    for (int i=1; i<=n; ++i)
    {
        maxa[i] = max(a[i], maxa[i-1]+a[i]);
        if (maxa[i] == x) flag = true;
        if (maxa[i]>x)
        {
            cnt++;
            maxa[i] = -1e18;
        }
    }
    if (cnt == 0 && flag)
        cout<<"0\n";
    else
        cout<<max(1ll, cnt)<<'\n';
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    int t=1;
    cin>>t;
    while (t--)
    {
        solve();
    }
    return 0;
}