fork download
  1. #include<bits/stdc++.h>
  2. #define ii pair<int, int>
  3. #define fi first
  4. #define se second
  5. #define iii pair<ii, int>
  6. using namespace std;
  7.  
  8. const int MOD = int(1e5 + 7);
  9. const int nmax = int(1e6 + 7);
  10.  
  11. int n, m;
  12. vector<int> a;
  13. long long d[nmax] = {0};
  14.  
  15. void prepare() {
  16. }
  17. void solve() {
  18. }
  19. int find_first(int u, int v, int x) {
  20. int L = u, R = v;
  21. while(true) {
  22. if(L == R) break;
  23. if(L == R-1) {
  24. if(a[L] < x) L = R;
  25. break;
  26. }
  27. int m = (L + R) / 2;
  28. if(a[m] >= x) R = m;
  29. else L = m+1;
  30. }
  31. return L;
  32. }
  33. void ip() {
  34. cin >> n >> m;
  35. a.resize(n+1);
  36. for(int i = 1; i <= n; ++i) {
  37. cin >> a[i];
  38. }
  39. sort(a.begin()+1, a.end());
  40. for(int i = 1; i <= n; ++i) {
  41. d[i] = d[i-1] + a[i];
  42. }
  43. long long ans = LLONG_MAX;
  44. for(int i = 1; i <= n - m + 1; ++i) {
  45. // select from i -> i + m - 1
  46. int tbc = (d[i + m -1] - d[i-1]) / m;
  47. int pos = find_first(i, i + m -1, tbc);
  48. long long thieu = 0, thua = 0;
  49. if(pos > i) {
  50. thieu = 1LL * (pos -1 -i +1) * tbc - (d[pos-1] - d[i-1]);
  51. }
  52. if(pos <= i + m -1) {
  53. thua = abs(1LL * (i + m -1 -pos +1) * tbc - (d[i + m -1] - d[pos-1]));
  54. }
  55. if(1LL * tbc * m <= d[n])
  56. ans = min(ans, max(thua, thieu));
  57. tbc = (d[i + m -1] - d[i-1]) / m + 1;
  58. pos = find_first(i, i + m -1, tbc);
  59. thieu = 0, thua = 0;
  60. if(pos > i) {
  61. thieu = 1LL * (pos -1 -i +1) * tbc - (d[pos-1] - d[i-1]);
  62. }
  63. if(pos <= i + m -1) {
  64. thua = abs(1LL * (i + m -1 -pos +1) * tbc - (d[i + m -1] - d[pos-1]));
  65. }
  66. if(1LL * tbc * m <= d[n])
  67. ans = min(ans, max(thua, thieu));
  68. // for(int j = i; j <= i + m - 1; ++j) {
  69. // cout << a[j] << " ";
  70. // } cout << '\n';
  71. // cout << "TBC: " << tbc << '\n';
  72. // cout << thua << " | " << thieu << '\n';
  73. }
  74. cout << ans;
  75. }
  76. int main(){
  77. ios_base::sync_with_stdio(0);
  78. cin.tie(0), cout.tie(0);
  79.  
  80. if(fopen("task.inp", "r")) {
  81. freopen("task.inp", "r", stdin);
  82. freopen("task.out", "w", stdout);
  83. }
  84. ip();
  85. }
  86.  
Success #stdin #stdout 0s 5320KB
stdin
7 5
1 1 2 5 5 5 5
stdout
4