fork download
  1. #include <bits/stdc++.h>
  2. #include <ext/pb_ds/assoc_container.hpp>
  3. #include <ext/pb_ds/tree_policy.hpp>
  4.  
  5. using namespace std;
  6. using namespace __gnu_pbds;
  7. using ll = long long;
  8. using ld = long double;
  9.  
  10. #define all(x) x.begin(),x.end()
  11. #define v(x) vector<x>
  12. #define nl '\n'
  13. #define fxd(x) fixed << setprecision(x)
  14. template<class t> using ordered_set = tree<t, null_type, less<t>, rb_tree_tag, tree_order_statistics_node_update>;
  15. template<class t> using ordered_multiset = tree<t, null_type, less_equal<t>, rb_tree_tag, tree_order_statistics_node_update>;
  16.  
  17. ll n , d;
  18. v(ll) arr;
  19.  
  20. pair<ll,ll> can(double x)
  21. {
  22. v(double) prefsum(n+1,0);
  23. // val,indx
  24. vector<pair<double,ll>> prefmin(n+1);
  25. for(ll i = 1; i <= n; i++)
  26. {
  27. prefsum[i] = prefsum[i-1] + (double)arr[i] - x;
  28. }
  29. prefmin[0] = {0ll,0ll};
  30. for(ll i = 1; i <= n; i++)
  31. {
  32. if(prefsum[i] < prefmin[i-1].first)
  33. {
  34. prefmin[i] = {prefsum[i],i};
  35. }
  36. else
  37. {
  38. prefmin[i] = prefmin[i-1];
  39. }
  40. }
  41.  
  42. for (ll r = d; r <= n; r++)
  43. {
  44. if(prefsum[r] - prefmin[r-d].first >= 0) return make_pair(prefmin[r-d].second+1,r);
  45. }
  46.  
  47. return make_pair(-1ll,-1ll);
  48. }
  49.  
  50. int main()
  51. {
  52. ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
  53. cin >> n>> d;
  54. arr.resize(n+1);
  55. for (int i = 1; i <= n; i++)
  56. {
  57. cin >> arr[i];
  58. }
  59.  
  60. ld l = 0, r = 1e8,mid;
  61. pair<ll,ll> ans = {1ll,1ll};
  62.  
  63. for (int i = 0; i < 80; i++)
  64. {
  65. mid = (l+r)/2;
  66.  
  67. pair<ll,ll> cur = can(mid);
  68. if(cur.first == -1ll && cur.second == -1ll)
  69. {
  70. r = mid;
  71. }
  72. else
  73. {
  74. l = mid;
  75. ans = cur;
  76. }
  77. }
  78.  
  79. cout << ans.first << " " << ans.second;
  80. }
Success #stdin #stdout 0.01s 5292KB
stdin
Standard input is empty
stdout
1 0