感觉思路没错啊,为什么第三个样例过不了。求助大佬
#include <bits/stdc++.h>
using namespace std;
#define N 1000010
template <class T>
inline void read(T& a){
T x = 0, s = 1;
char c = getchar();
while(!isdigit(c)){
if(c == '-') s = -1;
c = getchar();
}
while(isdigit(c)){
x = x * 10 + (c ^ '0');
c = getchar();
}
a = x * s;
return ;
}
int T;
int a[N];
double b[N];
double avg[N];
int k[N];
int sum[N];
int ans[N];
int n, q;
inline void clean(){
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(sum, 0, sizeof(sum));
memset(k, 0, sizeof(k));
memset(avg, 0, sizeof(avg));
memset(ans, 0, sizeof(ans));
return ;
}
int main(){
// freopen("hh.txt", "r", stdin);
read(T);
while(T--){
clean();
read(n), read(q);
for(int i = 1; i <= n; i++)
read(a[i]);
for(int i = 1; i <= q; i++)
read(k[i]);
sort(a + 1, a + n + 1);
for(int i = 1; i <= n; i++)
b[i] = (double)a[i];
for(int i = 1; i <= n; i++)
sum[i] = sum[i - 1] + a[i];
for(int i = 1; i <= n; i++)
avg[i] = (double)(sum[n] - sum[i - 1]) / (double)(n - i + 1);
for(int i = 1; i <= q; i++){
int pos = 1;
bool flag = 0;
for(int j = n; j; j = pos - 1){
pos = lower_bound(b + 1, b + j + 1, avg[j] - k[i]) - b;
if(pos >= j) { ans[i] = n - pos + 1; flag = 1; break;}
}
if(!flag) ans[i] = n;
}
for(int i = 1; i <= q; i++)
printf("%d ", ans[i]);
printf("\n");
}
return 0;
}