Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * with the help of God
- */
- #include <iostream>
- #include <cstdio>
- #include <set>
- #include <queue>
- #include <stack>
- #include <cstdlib>
- #include <cstring>
- #include <climits>
- #include <cmath>
- #include <deque>
- #include <algorithm>
- #include <vector>
- #include <cassert>
- #include <fstream>
- #include <sstream>
- #include <iomanip>
- #include <list>
- #include <complex>
- #include <functional>
- using namespace std;
- //typedef
- typedef long long ll;
- typedef long double ld;
- typedef unsigned int ui;
- typedef unsigned long long ull;
- typedef pair<int,int> pii;
- //define
- #define gi ({int t; scanf("%d",&t); t;})
- #define gl ({ll t; scanf("%lld",&t); t;})
- #define gd ({double t;scanf("%lf",&t); t;})
- #define rep(i,n) for(int i=0,_n=n;i<_n;i++)
- #define fr(i,a,b) for(int i=a;i<b;i++)
- #define frd(i,a,b) for(int i=b;i>=a;i--)
- #define repd(i,n) for(int _n=n,i=_n-1;i>=0;--i)
- #define fit(i,v) for(__typeof((v).begin()) i =(v).begin(); i != (v).end(); ++i)
- #define fitd(i,v) for(__typeof((v).rbegin()) i=(v).rbegin(); i!=(v).rend();++i)
- #define pb push_back
- #define mp make_pair
- #define fi first
- #define se second
- #define ms(a,x) memset(a, x, sizeof(a))
- #define sz(c) (int)(c).size()
- #define dbg(x) cerr<<#x<<" = "<<(x)<<endl
- #define sqr(x) ((x)*(x))
- #define mod (ll) (1e4 + 7 + eps)
- #define READ(f) freopen(f, "r", stdin)
- #define WRITE(f) freopen(f, "w", stdout)
- // maximum subarray sum
- void mss(int* a, int n, int x){
- rep(i,n){
- if(a[i] >= x){ printf("1\n"); return; }
- }
- ll s[n];
- deque <pii> dq;
- s[0] = a[0];
- ll cmx = a[0]; // current maximum
- int st[n];
- int start = 0;
- st[0] = 0; // start point from where cmx is calculated
- fr(i,1,n){
- cmx = max(cmx+a[i],(ll)a[i]);
- if(cmx == a[i]) start = i;
- s[i] = cmx;
- st[i] = start;
- }
- int mi = (1<<30)-1;
- ll sp = 0; // sum of popped elements
- rep(i,n){
- while(dq.size() > 0 && dq[0].second < st[i]){ sp = 0; dq.pop_front(); }
- ll ele = s[i]-sp;
- dq.pb(pii(a[i],i));
- if(ele < x) continue;
- while(dq.size() > 0 && ele-dq[0].first >= x){
- sp+=dq[0].first;
- ele-=dq[0].first;
- dq.pop_front();
- }
- mi = min(mi, sz(dq));
- }
- if(mi == (1<<30)-1) printf("-1\n");
- else printf("%d\n",mi);
- }
- void main2(){
- int n, x;
- n = gi, x = gi;
- int a[n];
- rep(i,n){
- a[i] = gi;
- }
- mss(a,n,x);
- }
- int main(){
- int t;
- t = gi;
- while(t--) main2();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement