#include <bits/stdc++.h>
using namespace std;
#define int int64_t
const int N = 3e5 + 1;
const int inf = 1e18;
struct segtree {
vector<int> t;
segtree() {
t.assign(4 * N, inf);
};
void update(int v, int l, int r, int i, int x) {
if (l > i or r < i or l > r) {
return;
} else if (l == r) {
t[v] = min(t[v], x);
} else {
int m = (l + r) >> 1;
if (i <= m) {
update(2 * v, l, m, i, x);
} else {
update(2 * v + 1, m + 1, r, i, x);
}
t[v] = min(t[2 * v], t[2 * v + 1]);
}
}
int get(int v, int l, int r, int L, int R) {
if (l > r or L > r or R < l) {
return inf;
} else if (L <= l and r <= R) {
return t[v];
} else {
int m = (l + r) >> 1;
int lt = get(2 * v, l, m, L, R);
int rt = get(2 * v + 1, m + 1, r, L, R);
return min(lt, rt);
}
}
};
segtree sl, sr;
int32_t main() {
ios :: sync_with_stdio(false);
cin.tie(nullptr);
int m, n;
cin >> m >> n;
vector<int> l(m + 1), r(m + 1), c(m + 1), w(m + 1), mn(m + 1), mx(m + 1);
vector<vector<int>> dp(m + 1, vector<int>(2));
for (int i = 0; i < m; i++) {
cin >> l[i] >> r[i] >> c[i] >> w[i];
}
int ans = 1e18;
map<int, int> mp;
set<int> st;
st.insert(1);
st.insert(n);
for (int i = 0; i < m; i++) {
st.insert(l[i]);
st.insert(r[i]);
st.insert(c[i]);
}
int i = 0;
for (int j : st) {
mp[j] = i + 1;
i++;
}
int sz = i;
sl.update(1, 1, sz, mp[1], 0);
sr.update(1, 1, sz, mp[n], 0);
for (int i = 0; i < m; i++) {
int lx = mp[l[i]];
int rx = mp[r[i]];
int k = mp[c[i]];
int val = w[i];
int cl = sl.get(1, 1, sz, lx, rx);
int cr = sr.get(1, 1, sz, lx, rx);
if (cl < inf and cr < inf) {
ans = min(ans, cl + cr + val);
}
if (cl < inf) {
sl.update(1, 1, sz, k, cl + val);
}
if (cr < inf) {
sr.update(1, 1, sz, k, cr + val);
}
}
if (ans == 1e18) {
cout << -1;
} else {
cout << ans;
}
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |