fork(1) download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. int64_t n, x;
  5. vector<int64_t> a;
  6. int64_t cost(int64_t k)
  7. {
  8. int64_t c = k;
  9. a[n/2]+=k;
  10. for(int64_t i = n/2+1;i<n;i++)
  11. if(a[i]<a[n/2]) c+= a[n/2]-a[i];
  12. a[n/2]-=k;
  13. return c;
  14. }
  15. int64_t cnp(int64_t l, int64_t r)
  16. {
  17. if(l>r) return -1;
  18. if(l==r)
  19. {
  20. int64_t t = cost(l);
  21. if(t>x) return -1;
  22. return l;
  23. }
  24. int64_t mid = (l+r)/2;
  25. int64_t t = cost(mid);
  26. if(t>x) return cnp(l,mid-1);
  27. if(t<=mid) return max(mid,cnp(mid+1,r));
  28. }
  29. int main()
  30. {
  31. cin >> n >> x;
  32. a.resize(n);
  33. for(int64_t i = 0;i<n;i++)
  34. cin >> a[i];
  35. sort(a.begin(),a.end());
  36. int64_t k = cnp(0,x);
  37. cout << a[n/2] + max(cnp(0,x),static_cast<int64_t>(0));
  38. return 0;
  39. }
  40.  
Success #stdin #stdout 0s 4444KB
stdin
5 5
1 2 1 1 1
stdout
3