이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 3e5 + 10;
const ll inf = 1e18;
int a[maxn], b[maxn], c[maxn], d[maxn];
vector<int> comp;
ll dp[maxn], pd[maxn];
ll seg[2][4 * maxn];
ll get(int w, int id, int L, int R, int l, int r){
if (r <= L or R <= l)
return inf;
if (l <= L and R <= r)
return seg[w][id];
int mid = (L + R) >> 1;
return min(get(w, 2*id+0, L, mid, l, r), get(w, 2*id+1, mid, R, l, r));
}
void add(int w, int id, int L, int R, int idx, ll val){
if (idx < L or R <= idx)
return;
if (L + 1 == R){
seg[w][id] = val;
return;
}
int mid = (L + R) >> 1;
add(w, 2 * id + 0, L, mid, idx, val);
add(w, 2 * id + 1, mid, R, idx, val);
seg[w][id] = min(seg[w][2 * id + 0], seg[w][2 * id + 1]);
}
int cmp(int x){
return lower_bound(comp.begin(), comp.end(), x) - comp.begin();
}
void add(int x){
comp.push_back(x);
}
int main(){
ios_base::sync_with_stdio (false);
cin.tie(0), cout.tie(0);
int m, n;
cin >> m >> n;
for (int i = 1; i <= m; i++){
cin >> a[i] >> c[i] >> b[i] >> d[i];
add(a[i]), add(b[i]), add(c[i]);
}
comp.push_back(1);
comp.push_back(n);
sort(comp.begin(), comp.end());
comp.resize(unique(comp.begin(), comp.end()) - comp.begin());
for (int i = 1; i <= m; i++)
a[i] = cmp(a[i]), b[i] = cmp(b[i]), c[i] = cmp(c[i]);
n = comp.size();
for (int i = 0; i < n; i++){
dp[i] = pd[i] = inf;
add(0, 1, 0, n, i, inf);
add(1, 1, 0, n, i, inf);
}
dp[0] = pd[n - 1] = 0;
add(0, 1, 0, n, 0, 0);
add(1, 1, 0, n, n - 1, 0);
ll answer = inf;
for (int i = 1; i <= m; i++){
ll s = get(0, 1, 0, n, a[i], c[i] + 1);
ll t = get(1, 1, 0, n, a[i], c[i] + 1);
answer = min(answer, s + t + d[i]);
if (s + d[i] < dp[b[i]]){
dp[b[i]] = s + d[i];
add(0, 1, 0, n, b[i], dp[b[i]]);
}
if (t + d[i] < pd[b[i]]){
pd[b[i]] = t + d[i];
add(1, 1, 0, n, b[i], pd[b[i]]);
}
}
if (answer == inf)
answer = -1;
cout << answer << endl;
}
# | 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... |