fork download
  1. #pragma GCC optimize("Ofast")
  2. #include <iostream>
  3. #include <string>
  4. #include <cstdio>
  5. #include <cstdlib>
  6. #include <cstring>
  7. #include <vector>
  8. #include <set>
  9. #include <map>
  10. #include <deque>
  11. #include <stack>
  12. #include <queue>
  13. #include <algorithm>
  14. #include <cassert>
  15. #include <random>
  16. #include <chrono>
  17. #include <iomanip>
  18. #include <cmath>
  19. #include <bitset>
  20. #include <functional>
  21. #include <ranges>
  22. #include <numeric>
  23. #define int long long
  24. #define double long double
  25. #define ii pair<int,int>
  26. #define iii pair<int, ii >
  27. #define fi first
  28. #define se second
  29. #define getbit(x,y) (((x)>>(y))&1ll)
  30. #define turnon(x,y) ((x)|(1ll<<y))
  31. #define turnof(x,y) ((x)^(1ll<<y))
  32. #define oo 1e18
  33. #define pb push_back
  34. #define all(x) x.begin(),x.end()
  35. #define con(mask) mask=(mask-1)&mask
  36. #define Unique(val) val.erase(unique(val.begin(),val.end()),val.end())
  37.  
  38. #define rand_int mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
  39. #define rand_ll mt19937_64 rnd(chrono::steady_clock::now().time_since_epoch().count());
  40.  
  41. const int mod = 1e9 + 7;
  42. const double pi = acos(-1);
  43. const double esp = 1e-7;
  44.  
  45. using namespace std;
  46.  
  47. int D;
  48. int T_c;
  49. int C_1, C_2;
  50. int N_1, N_2;
  51.  
  52. int h[100005];
  53.  
  54. deque<ii> Old, Middle, New;
  55.  
  56. void add(int day, int val) {
  57. ...
  58. }
  59.  
  60. void update(int pos_1, int pos_2) {
  61. ...
  62. }
  63.  
  64. int check(int mid) {
  65. // assume N_1 > N_2 and C_1 < C_2
  66. // If not we just need to use one of them
  67.  
  68. if(C_1 > C_2) {
  69. swap(N_1, N_2);
  70. swap(C_1, C_2);
  71. }
  72. if(N_1 < N_2) {
  73. N_2 = N_1;
  74. C_2 = C_1;
  75. }
  76.  
  77. Old.clear();
  78. Middle.clear();
  79. New.clear();
  80.  
  81. int sum = mid * T_c - mid * C_1;
  82.  
  83. add(-1000000, mid);
  84.  
  85. for(int i = 1; i <= D; i++) {
  86. update(i - N_1, i - N_2);
  87. int tmp = 0;
  88. while(Old.size() && tmp < h[i]) {
  89. ...
  90. }
  91.  
  92. while(Middle.size() && tmp < h[i]) {
  93. ...
  94. }
  95.  
  96. if(tmp < h[i]) return -1;
  97. add(i, h[i]);
  98. }
  99. return sum;
  100.  
  101. }
  102.  
  103. void solve() {
  104.  
  105. cin >> D >> N_1 >> N_2 >> C_1 >> C_2 >> T_c;
  106.  
  107. for(int i = 1; i <= D; i++) cin >> h[i];
  108.  
  109. int l = 0, r = 1e12;
  110. while(r - l > 2) {
  111. int mid_1 = l + ( r - l ) / 3;
  112. int mid_2 = l + ( r - l ) / 3 * 2;
  113. int tmp = check(mid_1);
  114. if(tmp < 0 || tmp >= check(mid_2)) {
  115. l = mid_1;
  116. }
  117. else r = mid_2;
  118. }
  119.  
  120. int ans = check(r);
  121.  
  122. for(int i = l; i < r; i++) {
  123. int tmp = check(i);
  124. if(tmp < 0) continue;
  125. ans = min(ans, tmp);
  126. }
  127. cout << ans;
  128.  
  129. }
  130.  
  131. signed main() {
  132.  
  133.  
  134. #ifndef ONLINE_JUDGE
  135. freopen("inp.inp", "r", stdin);
  136. freopen("out.out", "w", stdout);
  137. #endif
  138.  
  139.  
  140. ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
  141.  
  142. int t = 1;
  143. //cin >> t;
  144.  
  145. while(t--) {
  146. solve();
  147. }
  148. }
  149. // ProTeam
  150. //(¯`·.·´¯) (¯`·.·´¯)
  151. //`·.¸(¯`·.·´¯)¸ .·
  152. //×°× ` ·.¸.·´ ×°×
  153.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp:21:10: fatal error: ranges: No such file or directory
 #include <ranges>
          ^~~~~~~~
compilation terminated.
stdout
Standard output is empty