Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #ifndef Local
- #define debug(...) 1337
- #define endl '\n'
- #endif
- using namespace std;
- #define int long long
- typedef long long ll;
- typedef long double ld;
- #define all(x) (x).begin(), (x).end()
- #define sz(x) (int)(x).size()
- template<class A, class B>
- bool smin(A &x, B &&y) {
- if (x > y) {
- x = y;
- return true;
- }
- return false;
- }
- template<class A, class B>
- bool smax(A &x, B &&y) {
- if (x < y) {
- x = y;
- return true;
- }
- return false;
- }
- const int inf = 1e18;
- struct segTree {
- static const int maxn = 512 * 1024;
- int t[2 * maxn - 1]{};
- void upd(int i, int c) {
- i += maxn - 1;
- t[i] = c;
- while (i) {
- i = (i - 1) / 2;
- t[i] = min(t[2 * i + 1], t[2 * i + 2]);
- }
- }
- int lq, rq;
- int get(int i, int l, int r) {
- if (lq <= l && r <= rq)
- return t[i];
- int m = (l + r) / 2;
- int x = inf;
- if (lq < m)
- x = get(2 * i + 1, l, m);
- if (m < rq)
- smin(x, get(2 * i + 2, m, r));
- return x;
- }
- int get(int l, int r) {
- lq = l, rq = r;
- return get(0, 0, maxn);
- }
- };
- void solve() {
- int n, m;
- cin >> m >> n;
- vector<vector<pair<int, int>>> s(n + 2), t(n + 2);
- for (int i = 0, l, r, c; i < m; ++i) {
- cin >> l >> r >> c;
- s[r].emplace_back(l, c);
- t[l].emplace_back(r, c);
- }
- vector<int> dp(n + 2, inf), pd(n + 2, inf);
- segTree st, ts;
- st.upd(0, 0);
- ts.upd(n + 1, 0);
- dp[0] = 0, pd[n + 1] = 0;
- for (int i = 1; i <= n; ++i) {
- for (auto &[j, c]: s[i])
- smin(dp[i], st.get(j - 1, i) + c);
- st.upd(i, dp[i]);
- }
- for (int i = n; i >= 1; --i){
- for (auto& [j, c] : t[i])
- smin(pd[i], ts.get(i + 1, j + 2) + c);
- ts.upd(i, pd[i]);
- }
- debug(dp);
- debug(pd);
- int ans = inf;
- for (int i = 1; i <= n; ++i)
- smin(ans, dp[i - 1] + pd[i + 1]);
- if (ans == inf)
- ans = -1;
- cout << ans << endl;
- }
- signed main() {
- ios::sync_with_stdio(false), cin.tie(nullptr);
- int tt = 1;
- // cin >> tt;
- while (tt--)
- solve();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement