Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma GCC target("sse,sse2,sse3,ssse3,sse4,sse4.1,sse4.2,abm,mmx,avx,avx2,popcnt,tune=native")
- #pragma GCC optimize("unroll-loops")
- #include <iostream>
- #include <vector>
- #include <algorithm>
- #include <queue>
- #include <deque>
- #include <map>
- #include <set>
- #include <iomanip>
- #include <ctime>
- #include <random>
- using namespace std;
- #define pbc push_back
- #define pob pop_back()
- #define all(x) (x).begin(),(x).end()
- #define rall(x) (x).rbegin(),(x).rend()
- #define rev(x) reverse(all(x))
- #define sp system("pause")
- #define fastio() ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
- typedef long long ll;
- typedef long double ld;
- typedef unsigned long long ull;
- const int MAXN = 8e5 + 1;
- pair<int, int> lr[100];
- int c[100];
- int cnt[MAXN];
- const int keklog = 20;
- ll spt[MAXN][keklog];
- void upd(int i, ll x)
- {
- spt[i][0] = x;
- for (int a = 1; a < keklog; ++a)
- {
- if (i + (1 << (a-1)) - 1 >= MAXN)
- {
- spt[i][a] = spt[i][a - 1];
- continue;
- }
- spt[i][a] = min(spt[i][a - 1], spt[i + (1 << (a - 1))][a - 1]);
- }
- }
- inline ll get(int l, int r)
- {
- int x = cnt[r - l];
- return min(spt[l][x], spt[r - (1 << x)][x]);
- }
- signed main()
- {
- fastio();
- int n, a;
- cin >> n >> a;
- for (int i = 2; i < MAXN; ++i) cnt[i] = cnt[i >> 1] + 1;
- for (int i = 0; i < n; ++i)
- {
- cin >> lr[i].first >> lr[i].second >> c[i];
- }
- upd(a, 1ll * a * 1000000000);
- for (int i = a - 1; i >= 0; --i)
- {
- ll xa = 0;
- for (int j = 0; j < n; ++j)
- {
- ll xaa = 1e18;
- if (i + lr[j].second <= a)
- {
- xaa = get(i + lr[j].first, i + lr[j].second + 1)- c[j];
- xa = max(xa, xaa);
- }
- }
- upd(i, max(1ll * i * 1000000000, xa));
- }
- cout << get(0,1);
- sp;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement