Submission #45319474
Source Code Expand
#include <bits/stdc++.h>
#define int long long
#define SZ(x) (int) x.size() - 1
#define all(x) x.begin(), x.end()
#define ms(x, y) memset(x, y, sizeof x)
#define F(i, x, y) for (int i = (x); i <= (y); i++)
#define DF(i, x, y) for (int i = (x); i >= (y); i--)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
template <typename T> inline void chkmax(T& x, T y) { x = max(x, y); }
template <typename T> inline void chkmin(T& x, T y) { x = min(x, y); }
template <typename T> inline void read(T &x) {
x = 0; int f = 1; char c = getchar();
for (; !isdigit(c); c = getchar()) if (c == '-') f = -f;
for (; isdigit(c); c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48);
x *= f;
}
const int N = 2e5 + 10;
int x, n, m, w, t, s[N], f[N], sum[N];
pair <int, int> p[N];
vector <pair <int, int>> v[N];
int rt[N];
pair <int, int> seg[N * 30];
int ls[N * 30], rs[N * 30], tot;
__int128 calc(pair <int,int> x, int y) {
return (__int128) x.first * y + x.second;
}
void ins(int &num, int l, int r, pair <int, int> x) {
// cout << num << " " << l << " " << r << endl;
if (!num) {
num = ++tot;
seg[num] = x;
return;
}
int mid = (l + r) >> 1;
if (calc(seg[num], mid) > calc(x, mid)) swap(x, seg[num]);
if (l == r) return;
if (calc(seg[num], l) > calc(x, l)) ins(ls[num], l, mid, x);
if (calc(seg[num], r) > calc(x, r)) ins(rs[num], mid + 1, r, x);
}
int query(int num, int l, int r, int x) {
if (!num) return 1e18;
int mid = (l + r) >> 1, ans = seg[num].first * x + seg[num].second;
if (mid >= x) return min(query(ls[num], l, mid, x), ans);
return min(query(rs[num], mid + 1, r, x), ans);
}
void add(int x, pair <int, int> y) {
for (; x; x -= x & -x) ins(rt[x], -1e18, 0, y);
}
int query(int x, int y) {
int ans = 1e18;
for (; x <= m; x += x & -x) chkmin(ans, query(rt[x], -1e18, 0, y));
return ans;
}
signed main() {
// freopen("coach.in", "r", stdin);
// freopen("coach.out", "w", stdout);
read(x), read(n), read(m), read(w), read(t);
F(i, 1, n) read(s[i]);
F(i, 1, m) read(p[i].first), read(p[i].second);
sort(s + 1, s + n + 1);
s[n + 1] = x;
sort(p + 1, p + m + 1);
F(i, 0, n) {
int l = s[i], r = s[i + 1];
if (l / t != r / t) {
r %= t;
int tr = lower_bound(p + 1, p + m + 1, make_pair(r, (int) 0)) - p - 1;
// cout << "# " << tr << " " << 1 << " " << s[i + 1] / t << endl;
v[tr].emplace_back(1, s[i + 1] / t);
} else {
l %= t, r %= t;
int tl = lower_bound(p + 1, p + m + 1, make_pair(l, (int) 0)) - p, tr = lower_bound(p + 1, p + m + 1, make_pair(r, (int) 0)) - p - 1;
// cout << "$ " << tr << " " << tl << endl;
v[tr].emplace_back(tl, s[i] / t);
}
// cout << l << " " << r << endl;
// cout << "! " << tl << " " << tr << endl;
}
ms(f, 0x3f);
F(i, 1, m) sum[i] = sum[i - 1] + p[i].second;
f[0] = (x / t + 1) * w;
add(1, make_pair(0, f[0]));
F(i, 1, m) {
f[i] = f[i - 1] + ((x - p[i].first) / t + 1) * w;
for (pair <int, int> j: v[i]) chkmin(f[i], query(j.first, -j.second * w) + sum[i] + j.second * w * i);//, cout << "! " << query(j.first, -j.second * w) << " " << sum[i] << " " << j.second * w * i << endl;
add(i + 1, make_pair(i, f[i] - sum[i]));
// cout << f[i] << endl;
}
cout << f[m] << endl;
return 0;
}
Submission Info
| Submission Time |
|
| Task |
G - 長距離バス (Long Distance Coach) |
| User |
ast123 |
| Language |
C++ 20 (gcc 12.2) |
| Score |
100 |
| Code Size |
3299 Byte |
| Status |
AC |
| Exec Time |
617 ms |
| Memory |
77960 KiB |
Judge Result
| Set Name |
Subtask01 |
Subtask02 |
Subtask03 |
Subtask04 |
| Score / Max Score |
16 / 16 |
30 / 30 |
25 / 25 |
29 / 29 |
| Status |
|
|
|
|
| Set Name |
Test Cases |
| Subtask01 |
01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, sample-01.txt, sample-02.txt, sample-03.txt |
| Subtask02 |
01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 02-01.txt, 02-02.txt, 02-03.txt, 02-04.txt, 02-05.txt, 02-06.txt, 02-07.txt, 02-08.txt, 02-09.txt, 02-10.txt, 02-11.txt, 02-12.txt, 02-13.txt, 02-14.txt, 02-15.txt, sample-01.txt, sample-02.txt, sample-03.txt |
| Subtask03 |
01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 02-01.txt, 02-02.txt, 02-03.txt, 02-04.txt, 02-05.txt, 02-06.txt, 02-07.txt, 02-08.txt, 02-09.txt, 02-10.txt, 02-11.txt, 02-12.txt, 02-13.txt, 02-14.txt, 02-15.txt, 03-01.txt, 03-02.txt, 03-03.txt, 03-04.txt, 03-05.txt, 03-06.txt, 03-07.txt, 03-08.txt, 03-09.txt, 03-10.txt, 03-11.txt, 03-12.txt, 03-13.txt, 03-14.txt, sample-01.txt, sample-02.txt, sample-03.txt |
| Subtask04 |
01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 02-01.txt, 02-02.txt, 02-03.txt, 02-04.txt, 02-05.txt, 02-06.txt, 02-07.txt, 02-08.txt, 02-09.txt, 02-10.txt, 02-11.txt, 02-12.txt, 02-13.txt, 02-14.txt, 02-15.txt, 03-01.txt, 03-02.txt, 03-03.txt, 03-04.txt, 03-05.txt, 03-06.txt, 03-07.txt, 03-08.txt, 03-09.txt, 03-10.txt, 03-11.txt, 03-12.txt, 03-13.txt, 03-14.txt, 04-01.txt, 04-02.txt, 04-03.txt, 04-04.txt, 04-05.txt, 04-06.txt, 04-07.txt, 04-08.txt, 04-09.txt, 04-10.txt, 04-11.txt, 04-12.txt, 04-13.txt, 04-14.txt, 04-15.txt, 04-16.txt, 04-17.txt, 04-18.txt, 04-19.txt, 04-20.txt, 04-21.txt, 04-22.txt, 04-23.txt, 04-24.txt, 04-25.txt, 04-26.txt, 04-27.txt, 04-28.txt, 04-29.txt, sample-01.txt, sample-02.txt, sample-03.txt |
| Case Name |
Status |
Exec Time |
Memory |
| 01-01.txt |
AC |
2 ms |
5040 KiB |
| 01-02.txt |
AC |
2 ms |
5084 KiB |
| 01-03.txt |
AC |
2 ms |
5084 KiB |
| 01-04.txt |
AC |
2 ms |
4960 KiB |
| 01-05.txt |
AC |
2 ms |
5088 KiB |
| 01-06.txt |
AC |
2 ms |
5048 KiB |
| 01-07.txt |
AC |
2 ms |
5084 KiB |
| 01-08.txt |
AC |
2 ms |
5044 KiB |
| 01-09.txt |
AC |
2 ms |
5080 KiB |
| 01-10.txt |
AC |
2 ms |
4960 KiB |
| 01-11.txt |
AC |
2 ms |
5020 KiB |
| 01-12.txt |
AC |
2 ms |
5236 KiB |
| 01-13.txt |
AC |
2 ms |
5048 KiB |
| 01-14.txt |
AC |
2 ms |
5040 KiB |
| 01-15.txt |
AC |
2 ms |
5020 KiB |
| 01-16.txt |
AC |
2 ms |
5028 KiB |
| 01-17.txt |
AC |
2 ms |
5028 KiB |
| 01-18.txt |
AC |
2 ms |
4960 KiB |
| 01-19.txt |
AC |
2 ms |
5032 KiB |
| 01-20.txt |
AC |
2 ms |
5044 KiB |
| 01-21.txt |
AC |
2 ms |
5080 KiB |
| 01-22.txt |
AC |
2 ms |
5236 KiB |
| 02-01.txt |
AC |
2 ms |
5056 KiB |
| 02-02.txt |
AC |
2 ms |
5044 KiB |
| 02-03.txt |
AC |
2 ms |
5056 KiB |
| 02-04.txt |
AC |
2 ms |
5160 KiB |
| 02-05.txt |
AC |
3 ms |
5092 KiB |
| 02-06.txt |
AC |
2 ms |
5056 KiB |
| 02-07.txt |
AC |
2 ms |
5244 KiB |
| 02-08.txt |
AC |
2 ms |
5044 KiB |
| 02-09.txt |
AC |
2 ms |
5076 KiB |
| 02-10.txt |
AC |
2 ms |
5084 KiB |
| 02-11.txt |
AC |
2 ms |
5152 KiB |
| 02-12.txt |
AC |
2 ms |
5244 KiB |
| 02-13.txt |
AC |
2 ms |
5168 KiB |
| 02-14.txt |
AC |
2 ms |
5092 KiB |
| 02-15.txt |
AC |
2 ms |
5048 KiB |
| 03-01.txt |
AC |
4 ms |
5324 KiB |
| 03-02.txt |
AC |
5 ms |
5520 KiB |
| 03-03.txt |
AC |
4 ms |
5384 KiB |
| 03-04.txt |
AC |
5 ms |
5520 KiB |
| 03-05.txt |
AC |
5 ms |
5360 KiB |
| 03-06.txt |
AC |
5 ms |
5332 KiB |
| 03-07.txt |
AC |
5 ms |
5348 KiB |
| 03-08.txt |
AC |
5 ms |
5292 KiB |
| 03-09.txt |
AC |
6 ms |
5604 KiB |
| 03-10.txt |
AC |
3 ms |
5296 KiB |
| 03-11.txt |
AC |
4 ms |
5364 KiB |
| 03-12.txt |
AC |
4 ms |
5416 KiB |
| 03-13.txt |
AC |
4 ms |
5364 KiB |
| 03-14.txt |
AC |
4 ms |
5316 KiB |
| 04-01.txt |
AC |
355 ms |
35960 KiB |
| 04-02.txt |
AC |
308 ms |
37892 KiB |
| 04-03.txt |
AC |
581 ms |
35840 KiB |
| 04-04.txt |
AC |
584 ms |
35064 KiB |
| 04-05.txt |
AC |
469 ms |
30572 KiB |
| 04-06.txt |
AC |
450 ms |
36532 KiB |
| 04-07.txt |
AC |
155 ms |
25892 KiB |
| 04-08.txt |
AC |
589 ms |
35168 KiB |
| 04-09.txt |
AC |
606 ms |
36140 KiB |
| 04-10.txt |
AC |
582 ms |
35096 KiB |
| 04-11.txt |
AC |
564 ms |
35416 KiB |
| 04-12.txt |
AC |
617 ms |
77960 KiB |
| 04-13.txt |
AC |
429 ms |
39852 KiB |
| 04-14.txt |
AC |
363 ms |
33668 KiB |
| 04-15.txt |
AC |
146 ms |
26908 KiB |
| 04-16.txt |
AC |
538 ms |
42680 KiB |
| 04-17.txt |
AC |
446 ms |
37432 KiB |
| 04-18.txt |
AC |
461 ms |
34888 KiB |
| 04-19.txt |
AC |
445 ms |
34744 KiB |
| 04-20.txt |
AC |
441 ms |
34732 KiB |
| 04-21.txt |
AC |
448 ms |
34688 KiB |
| 04-22.txt |
AC |
407 ms |
33456 KiB |
| 04-23.txt |
AC |
264 ms |
31344 KiB |
| 04-24.txt |
AC |
192 ms |
28828 KiB |
| 04-25.txt |
AC |
159 ms |
25924 KiB |
| 04-26.txt |
AC |
378 ms |
42200 KiB |
| 04-27.txt |
AC |
249 ms |
40844 KiB |
| 04-28.txt |
AC |
343 ms |
35980 KiB |
| 04-29.txt |
AC |
358 ms |
35940 KiB |
| sample-01.txt |
AC |
2 ms |
5036 KiB |
| sample-02.txt |
AC |
2 ms |
5080 KiB |
| sample-03.txt |
AC |
2 ms |
5028 KiB |