fork download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define ll long long
  6. #define int ll
  7. #define endl '\n'
  8. #define vll vector<ll>
  9. #define input(arr) \
  10.   for (auto& i : arr) cin >> i
  11. #define print(arr) \
  12.   for (auto& i : arr) cout << i << ' '; cout << '\n'
  13. #define INF LLONG_MAX
  14. #define YARAB_ACCEPT ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
  15.  
  16. ll dx[] = {0, 0, -1, 1, 1, 1, -1, -1};
  17. ll dy[] = {-1, 1, 0, 0, -1, 1, -1, 1};
  18. const ll N = 1e5 + 5;
  19.  
  20. void solve() {
  21. ll n, t; cin >> n >> t;
  22. vll L, R;
  23. bool has_zero = 0;
  24.  
  25. for (ll i = 0; i < n; ++i) {
  26. ll x; cin >> x;
  27. if (!x) {
  28. has_zero = 1;
  29. continue;
  30. }
  31.  
  32. (x < 0? L.push_back(-x) : R.push_back(x));
  33. }
  34.  
  35. sort(L.begin(), L.end());
  36. sort(R.begin(), R.end());
  37.  
  38. ll ans = 0;
  39.  
  40. for (ll i = 0; i <= L.size(); ++i) {
  41. ll dist_left = (i == 0? 0 : L[i - 1]);
  42. if (dist_left > t) break;
  43.  
  44. ll time_to_origin = t - 2 * dist_left;
  45. ll dist_right = 0;
  46. if (time_to_origin > 0) {
  47. dist_right = upper_bound(R.begin(), R.end(), time_to_origin) - R.begin();
  48. }
  49.  
  50. ans = max(ans, i + dist_right);
  51. }
  52.  
  53. for (ll i = 0; i <= R.size(); ++i) {
  54. ll dist_right = (i == 0? 0 : R[i - 1]);
  55. if (dist_right > t) break;
  56.  
  57. ll time_to_origin = t - 2 * dist_right;
  58. ll dist_left = 0;
  59. if (time_to_origin > 0) {
  60. dist_left = upper_bound(L.begin(), L.end(), time_to_origin) - L.begin();
  61. }
  62.  
  63. ans = max(ans, i + dist_left);
  64. }
  65.  
  66. cout << (has_zero? ans + 1 : ans) << '\n';
  67. }
  68.  
  69. signed main() {
  70. YARAB_ACCEPT
  71. ll t = 1;
  72. // cin >> t;
  73. while (t--)
  74. solve();
  75.  
  76. return 0;
  77. }
Success #stdin #stdout 0.01s 5292KB
stdin
Standard input is empty
stdout
0