Advertisement
Guest User

Untitled

a guest
Feb 26th, 2020
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.68 KB | None | 0 0
  1. #pragma GCC target("sse,sse2,sse3,ssse3,sse4,sse4.1,sse4.2,abm,mmx,avx,avx2,popcnt,tune=native")
  2. #pragma GCC optimize("unroll-loops")
  3. #include <iostream>
  4. #include <vector>
  5. #include <algorithm>
  6. #include <queue>
  7. #include <deque>
  8. #include <map>
  9. #include <set>
  10. #include <iomanip>
  11. #include <ctime>
  12. #include <random>
  13. using namespace std;
  14. #define pbc push_back
  15. #define pob pop_back()
  16. #define all(x) (x).begin(),(x).end()
  17. #define rall(x) (x).rbegin(),(x).rend()
  18. #define rev(x) reverse(all(x))
  19. #define sp system("pause")
  20. #define fastio() ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
  21. typedef long long ll;
  22. typedef long double ld;
  23. typedef unsigned long long ull;
  24.  
  25. const int MAXN = 8e5 + 1;
  26. pair<int, int> lr[100];
  27. int c[100];
  28. int cnt[MAXN];
  29. const int keklog = 20;
  30. ll spt[MAXN][keklog];
  31. void upd(int i, ll x)
  32. {
  33. spt[i][0] = x;
  34. for (int a = 1; a < keklog; ++a)
  35. {
  36. if (i + (1 << (a-1)) - 1 >= MAXN)
  37. {
  38. spt[i][a] = spt[i][a - 1];
  39. continue;
  40. }
  41. spt[i][a] = min(spt[i][a - 1], spt[i + (1 << (a - 1))][a - 1]);
  42. }
  43. }
  44. inline ll get(int l, int r)
  45. {
  46. int x = cnt[r - l];
  47. return min(spt[l][x], spt[r - (1 << x)][x]);
  48. }
  49. signed main()
  50. {
  51. fastio();
  52. int n, a;
  53. cin >> n >> a;
  54. for (int i = 2; i < MAXN; ++i) cnt[i] = cnt[i >> 1] + 1;
  55. for (int i = 0; i < n; ++i)
  56. {
  57. cin >> lr[i].first >> lr[i].second >> c[i];
  58. }
  59. upd(a, 1ll * a * 1000000000);
  60. for (int i = a - 1; i >= 0; --i)
  61. {
  62. ll xa = 0;
  63. for (int j = 0; j < n; ++j)
  64. {
  65. ll xaa = 1e18;
  66. if (i + lr[j].second <= a)
  67. {
  68. xaa = get(i + lr[j].first, i + lr[j].second + 1)- c[j];
  69. xa = max(xa, xaa);
  70. }
  71. }
  72. upd(i, max(1ll * i * 1000000000, xa));
  73. }
  74. cout << get(0,1);
  75. sp;
  76.  
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement