### G.
一眼看上去很想个背包,然后发现好像不大能做。
考虑反悔贪心。
对于当前的 $c_i$,如果到现在攒的钱足够买这个,那就直接买了它。如果钱不够,就从之前的买过的里面把一个最大的给退掉,然后买这个,优先队列维护即可。
```c++
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e6 + 7;
int c[N];
void solve() {
int n, x;
cin >> n >> x;
for(int i = 1; i <= n; i ++) {
cin >> c[i];
}
int now = 0;
priority_queue<int> q;
for(int i = 1; i <= n; i ++) {
if(c[i] <= now) {
now -= c[i];
q.push(c[i]);
}
else {
if(!q.empty() && q.top() > c[i]) {
int u = q.top();
q.pop();
now = now + u - c[i];
q.push(c[i]);
}
}
now += x;
}
cout << q.size() << endl;
}
signed main() {
int T;
cin >> T;
while(T --) solve();
}
```