fork download
  1. #include <iostream>
  2. #include <algorithm>
  3.  
  4. bool possible ( int *a , int &mid , int &exp , int &r ) {
  5. int req = 0 , have = mid ;
  6. for ( int i = mid ; i <= r ; i++ ) req += exp - a[i] ;
  7. if ( req <= have ) return 1 ;
  8. return 0 ;
  9. }
  10.  
  11. int32_t main () {
  12. int t = 1 ;
  13. scanf("%d", &t ) ;
  14. while ( t-- ) {
  15. int n = 0 , q = 0 ;
  16. scanf("%d", &n ) ;
  17. scanf("%d", &q ) ;
  18.  
  19. int a[n] ;
  20. for ( int i = 0 ; i < n ; i++ ) scanf("%d", &a[i] ) ;
  21. std :: sort(a,a+n) ;
  22.  
  23. while ( q-- ) {
  24. int exp = 0 , exi = 0 ;
  25. scanf("%d", &exp ) ;
  26.  
  27. int i = 0 , j = n ;
  28. int low = 0 , high = n-1 ;
  29.  
  30. while ( low <= high ) {
  31. int mid = ((low+high)>>1) ;
  32. if ( a[mid] >= exp ) {
  33. j = mid ;
  34. high = mid - 1 ;
  35. } else {
  36. low = mid + 1 ;
  37. }
  38. }
  39.  
  40. exi += (n-j) ;
  41. j-- ;
  42.  
  43. int cur = 0 ;
  44. int l = 0 , r = j ;
  45. while ( i <= j ) {
  46. int mid = ((i+j)>>1) ;
  47. if ( possible(a,mid,exp,r) ) {
  48. cur = (r-mid+1) ;
  49. j = mid - 1 ;
  50. } else {
  51. i = mid + 1 ;
  52. }
  53. }
  54.  
  55. printf ( "%d\n" , exi + cur ) ;
  56. }
  57. }
  58. return 0 ;
  59. }
Success #stdin #stdout 0.01s 5340KB
stdin
Standard input is empty
stdout
Standard output is empty