This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define fi first
#define se second
#define pb push_back
#define ep emplace_back
#define lwb lower_bound
#define upb upper_bound
#define gcd(x, y) __gcd(x, y)
#define lcm(x, y) x * y / __gcd(x, y)
const int mod = 1e9 + 7;
const ll inf = 1e18;
const int mxN = 1e5 + 5;
const int block = 450;
const int base = 311;
const int LOG = 19;
struct pinball {
ll a, b, c, d;
} a[mxN];
int m, n;
namespace sub3 {
bool check() {
return m <= 1000;
}
ll L[mxN], R[mxN];
void solve() {
for (int i = 1; i <= m; i++) {
L[i] = inf;
R[i] = inf;
}
for (int i = 1; i <= m; i++) {
if (a[i].a == 1) {
L[i] = a[i].d;
}
if (a[i].b == n) {
R[i] = a[i].d;
}
for (int j = 1; j < i; j++) {
if (a[j].a < a[i].a && a[i].a <= a[j].c && a[j].c <= a[i].b) {
L[i] = min(L[i], L[j] + a[i].d);
}
if (a[j].b > a[i].b && a[i].a <= a[j].c && a[j].c <= a[i].b) {
R[i] = min(R[i], R[j] + a[i].d);
}
}
}
ll ans = inf;
for (int i = 1; i <= m; i++) {
ans = min(ans, L[i] + R[i] - a[i].d);
}
if (ans == inf) {
cout << -1;
}
else {
cout << ans;
}
}
}
//namespace sub4 {
// bool
//}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> m >> n;
for (int i = 1; i <= m; i++) {
cin >> a[i].a >> a[i].b >> a[i].c >> a[i].d;
}
if (sub3::check()) return sub3::solve(), 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... |