Advertisement
aayyk

Untitled

Mar 17th, 2020
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.13 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <cstdlib>
  4. #include <algorithm>
  5. #include <vector>
  6. #include <queue>
  7. #include <stack>
  8. #include <climits>
  9. #include <string>
  10. #include <set>
  11. #include <cmath>
  12. #include <map>
  13. #include <unordered_map>
  14. #include <numeric>
  15. #include <random>
  16. #include <memory>
  17. #include <chrono>
  18. #include <iterator>
  19. #include <functional>
  20. #include <unordered_set>
  21. #include <cassert>
  22. #include <cstring>
  23. #include <bitset>
  24. #ifdef LOCAL
  25. #include "debug.h"
  26. #else
  27. #define debug(x...)
  28. #endif
  29. //#define int ll
  30.  
  31. //#pragma GCC optimize("Ofast")
  32. //#pragma GCC target("avx2")
  33.  
  34. using namespace std;
  35. typedef long long ll;
  36. typedef long double ld;
  37. typedef pair < int, int > pii;
  38. typedef pair < ll, ll > pll;
  39. #define sz(x) int((x).size())
  40.  
  41. #ifndef LOCAL
  42. mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
  43. #else
  44. mt19937 rng(228);
  45. #endif
  46.  
  47. const int N = 2e6 + 7;
  48. const int inf = INT_MAX / 2;
  49. const ll INF = LLONG_MAX / 3;
  50. const int MOD = 1e9 + 7;
  51. const double eps = 1e-6;
  52. const string cars[] = {"🚗", "🚕", "🚙"};
  53.  
  54. const int M = 1e2 + 7;
  55.  
  56. ll dp[N];
  57. int l[M], r[M], c[M], n, a;
  58. deque < ll > d[M];
  59.  
  60. signed main() {
  61.     //debug(true);
  62. #ifdef LOCAL
  63.     freopen("input.txt", "r", stdin);
  64.     //freopen("output.txt", "w", stdout);
  65. #endif
  66.     cout << fixed << setprecision(4);
  67.     ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  68.  
  69.     cin >> n >> a;
  70.  
  71.     for (int i = 0; i < n; i++) {
  72.         cin >> l[i] >> r[i] >> c[i];
  73.     }
  74.  
  75.     for (int i = a; i >= 0; i--) {
  76.         dp[i] = 1000000000LL * i;
  77.  
  78.         for (int j = 0; j < n; j++) {
  79.             if (i + l[j] > a) {
  80.                 continue;
  81.             }
  82.             ll t = dp[i + l[j]];
  83.            
  84.  
  85.             while (!d[j].empty() && d[j].back() > t) {
  86.                 d[j].pop_back();
  87.             }
  88.             d[j].push_back(t);
  89.  
  90.             if (i + r[j] <= a) {
  91.                 dp[i] = max(dp[i], d[j].front() - c[j]);
  92.  
  93.                 if (d[j].front() == dp[i + r[j]]) {
  94.                     d[j].pop_front();
  95.                 }
  96.             }
  97.         }
  98.     }
  99.  
  100.     cout << dp[0] << endl;
  101.  
  102.     return 0;
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement