/****************************************** * AUTHOR: BHUVNESH JAIN * * INSTITUITION: BITS PILANI, PILANI * ******************************************/ #include using namespace std; typedef long long LL; typedef long double LD; typedef pair pii; typedef pair pll; #define fi first #define sec second const int MAX = 1e5 + 5; int n, d; int a[MAX]; int dnc(int i, int j) { if (i == j) { if (a[i] >= d) { return 1; } return INT_MAX; } int ans = INT_MAX; int m = (i + j) / 2; int u = dnc(i, m); ans = min(ans, u); int v = dnc(m+1, j); ans = min(ans, v); map mp, mp2; int sum = 0; for(int x = m+1; x <= j; ++x) { sum += a[x]; if (sum >= d) { ans = min(ans, x - m); } if (mp.find(sum) == mp.end()) { mp[sum] = x; mp2[-sum] = x; } } int last = INT_MAX; for(auto it : mp2) { mp[-it.fi] = min(mp[-it.fi], last); last = min(last, it.sec); } sum = 0; for(int x = m; x >= i; --x) { sum += a[x]; if (sum >= d) { ans = min(ans, m - x + 1); } int req = d - sum; auto it = mp.lower_bound(req); if (it != mp.end()) { ans = min(ans, it->sec - x + 1); } } mp.clear(); mp2.clear(); return ans; } int main() { int t; scanf("%d", &t); while(t--) { scanf("%d %d", &n, &d); for(int i = 1; i <= n; ++i) { scanf("%d", &a[i]); } int res = dnc(1, n); if (res == INT_MAX) { res = -1; } printf("%d\n", res); } return 0; }