Submission #35816925
Source Code Expand
#include <bits/stdc++.h>
using namespace std;
template<typename T>
vector<array<T, 2>> merge(vector<array<T, 2>> v) {
if (v.empty())
return {};
sort(v.begin(), v.end());
vector<array<T, 2>> tmp;
tmp.push_back(v[0]);
for (auto [l, r] : v) {
auto &[l1, r1] = tmp.back();
if (l <= r1) {
r1 = max(r1, r);
} else {
tmp.push_back({l, r});
}
}
return tmp;
};
template<typename T>
vector<array<T, 2>> filter(vector<array<T, 2>> v) {
if (v.empty())
return {};
sort(v.begin(), v.end());
vector<array<T, 2>> tmp;
tmp.push_back(v[0]);
for (auto [l, r] : v) {
auto &[l1, r1] = tmp.back();
if (r <= r1)
continue;
if (l == l1)
tmp.pop_back();
tmp.push_back({l, r});
}
return tmp;
};
template<typename T>
int getPos(const vector<array<T, 2>> &v, T x) {
if (v.empty())
return -1;
auto p = lower_bound(v.begin(), v.end(), array<T, 2> {x + 1, numeric_limits<T>::min()});
if (p == v.begin())
return -1;
p = prev(p);
if ((*p)[1] < x)
return -1;
return p - v.begin();
};
int main() {
cin.tie(NULL)->ios_base::sync_with_stdio(false);
int n, m, q;
cin >> n >> m >> q;
vector<array<int, 2>> elevators;
vector<vector<array<int, 2>>> e(n + 1);
for (int i = 1; i <= m; ++i) {
int a, b, c;
cin >> a >> b >> c;
e[a].push_back({b, c});
}
for (auto &v : e) {
v = merge(v);
elevators.insert(elevators.end(), v.begin(), v.end());
}
elevators = filter(elevators);
m = elevators.size();
int lg = log2(m) + 1;
auto f = vector(lg, vector(m, 0));
for (int i = 0, j = 0; i < m; ++i) {
while (j + 1 < m && elevators[j + 1][0] <= elevators[i][1])
++j;
f[0][i] = j;
}
for (int i = 1; i < lg; ++i) {
for (int j = 0; j < m; ++j) {
f[i][j] = f[i - 1][f[i - 1][j]];
}
}
for (int i = 1; i <= q; ++i) {
int a, b, x, y;
cin >> a >> x >> b >> y;
if (x > y) {
swap(a, b);
swap(x, y);
}
int ans = y - x;
if (int p = getPos(e[a], x); p != -1) {
x = e[a][p][1];
}
if (int p = getPos(e[b], y); p != -1) {
y = e[b][p][0];
}
if (y <= x) {
cout << ans + (a != b) << "\n";
continue;
}
int p = getPos(elevators, x);
if (p == -1) {
cout << -1 << "\n";
continue;
}
++ans;
x = elevators[p][1];
if (x >= y) {
cout << ans + 1 << "\n";
continue;
}
for (int i = lg - 1; i >= 0; --i) {
if (elevators[f[i][p]][1] < y) {
p = f[i][p];
ans += 1 << i;
}
}
++ans;
p = f[0][p];
x = elevators[p][1];
if (x < y) {
cout << -1 << "\n";
} else {
cout << ans + 1 << "\n";
}
}
return 0;
}
Submission Info
| Submission Time | |
|---|---|
| Task | G - Elevators |
| User | SkqLiiiao |
| Language | C++ (GCC 9.2.1) |
| Score | 600 |
| Code Size | 3166 Byte |
| Status | AC |
| Exec Time | 382 ms |
| Memory | 28780 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 600 / 600 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | example_00.txt, example_01.txt |
| All | example_00.txt, example_01.txt, test_00.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt, test_44.txt, test_45.txt, test_46.txt, test_47.txt, test_48.txt, test_49.txt, test_50.txt, test_51.txt, test_52.txt, test_53.txt, test_54.txt, test_55.txt, test_56.txt, test_57.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| example_00.txt | AC | 8 ms | 3684 KiB |
| example_01.txt | AC | 2 ms | 3604 KiB |
| test_00.txt | AC | 97 ms | 6636 KiB |
| test_01.txt | AC | 171 ms | 10916 KiB |
| test_02.txt | AC | 137 ms | 9088 KiB |
| test_03.txt | AC | 137 ms | 8092 KiB |
| test_04.txt | AC | 89 ms | 8264 KiB |
| test_05.txt | AC | 254 ms | 15580 KiB |
| test_06.txt | AC | 255 ms | 15504 KiB |
| test_07.txt | AC | 261 ms | 15696 KiB |
| test_08.txt | AC | 255 ms | 15648 KiB |
| test_09.txt | AC | 256 ms | 15756 KiB |
| test_10.txt | AC | 243 ms | 28692 KiB |
| test_11.txt | AC | 241 ms | 28708 KiB |
| test_12.txt | AC | 246 ms | 28716 KiB |
| test_13.txt | AC | 240 ms | 28632 KiB |
| test_14.txt | AC | 240 ms | 28716 KiB |
| test_15.txt | AC | 246 ms | 28716 KiB |
| test_16.txt | AC | 244 ms | 28720 KiB |
| test_17.txt | AC | 241 ms | 28780 KiB |
| test_18.txt | AC | 362 ms | 28724 KiB |
| test_19.txt | AC | 382 ms | 28652 KiB |
| test_20.txt | AC | 369 ms | 28744 KiB |
| test_21.txt | AC | 369 ms | 28632 KiB |
| test_22.txt | AC | 286 ms | 28540 KiB |
| test_23.txt | AC | 291 ms | 28644 KiB |
| test_24.txt | AC | 294 ms | 28600 KiB |
| test_25.txt | AC | 290 ms | 28636 KiB |
| test_26.txt | AC | 66 ms | 3548 KiB |
| test_27.txt | AC | 66 ms | 3556 KiB |
| test_28.txt | AC | 68 ms | 3680 KiB |
| test_29.txt | AC | 66 ms | 3728 KiB |
| test_30.txt | AC | 69 ms | 3608 KiB |
| test_31.txt | AC | 67 ms | 3740 KiB |
| test_32.txt | AC | 71 ms | 3612 KiB |
| test_33.txt | AC | 67 ms | 3488 KiB |
| test_34.txt | AC | 256 ms | 15644 KiB |
| test_35.txt | AC | 259 ms | 15528 KiB |
| test_36.txt | AC | 261 ms | 15472 KiB |
| test_37.txt | AC | 247 ms | 15592 KiB |
| test_38.txt | AC | 244 ms | 15396 KiB |
| test_39.txt | AC | 243 ms | 15668 KiB |
| test_40.txt | AC | 251 ms | 15580 KiB |
| test_41.txt | AC | 246 ms | 15672 KiB |
| test_42.txt | AC | 200 ms | 11524 KiB |
| test_43.txt | AC | 198 ms | 11540 KiB |
| test_44.txt | AC | 201 ms | 11544 KiB |
| test_45.txt | AC | 199 ms | 11584 KiB |
| test_46.txt | AC | 199 ms | 11600 KiB |
| test_47.txt | AC | 200 ms | 11596 KiB |
| test_48.txt | AC | 198 ms | 11644 KiB |
| test_49.txt | AC | 196 ms | 11552 KiB |
| test_50.txt | AC | 197 ms | 12284 KiB |
| test_51.txt | AC | 208 ms | 12380 KiB |
| test_52.txt | AC | 203 ms | 12256 KiB |
| test_53.txt | AC | 199 ms | 12284 KiB |
| test_54.txt | AC | 201 ms | 12316 KiB |
| test_55.txt | AC | 212 ms | 12380 KiB |
| test_56.txt | AC | 206 ms | 12392 KiB |
| test_57.txt | AC | 203 ms | 12384 KiB |