Submission #1046963

#TimeUsernameProblemLanguageResultExecution timeMemory
1046963NeroZeinOvertaking (IOI23_overtaking)C++17
65 / 100
3544 ms39504 KiB
#include "overtaking.h" #include <bits/stdc++.h> using namespace std; int n, m; vector<int> w, s; vector<vector<long long>> t; vector<vector<pair<long long, long long>>> ps; void init(int L, int N_, vector<long long> T, vector<int> W, int X, int M_, vector<int> S) { n = N_, m = M_; w = W; w.push_back(X); s = S; t.resize(m); t[0] = T; for (int j = 1; j < m; ++j) { t[j].resize(n); vector<long long> e(n); for (int i = 0; i < n; ++i) { e[i] = t[j - 1][i] + (long long) w[i] * (s[j] - s[j - 1]); } vector<int> ord(n); iota(ord.begin(), ord.end(), 0); sort(ord.begin(), ord.end(), [&](int x, int y) { return t[j - 1][x] < t[j - 1][y]; }); int ptr = 0; long long mx = 0; for (int i = 0; i < n; ++i) { int cur_bus = ord[i]; while (ptr < i && t[j - 1][ord[ptr]] < t[j - 1][cur_bus]) { mx = max(mx, e[ord[ptr]]); ptr++; } t[j][cur_bus] = max(e[cur_bus], mx); } //cout << "J: " << j << ' '; //for (int i = 0; i < n; ++i) { //cout << t[j][i] << " \n"[i == n - 1]; //} } ps.resize(m - 1); for (int j = 0; j < m - 1; ++j) { ps[j].resize(n); for (int i = 0; i < n; ++i) { ps[j][i] = {t[j][i], t[j + 1][i]}; } sort(ps[j].begin(), ps[j].end()); for (int i = 1; i < n; ++i) { ps[j][i].second = max(ps[j][i].second, ps[j][i - 1].second); } } } long long arrival_time(long long cur_time) { for (int j = 1; j < m; ++j) { long long e = cur_time + (long long) w[n] * (s[j] - s[j - 1]); pair<long long, long long> key = {cur_time, 0LL}; int ind = lower_bound(ps[j - 1].begin(), ps[j - 1].end(), key) - ps[j - 1].begin() - 1; long long block_time = 0; if (ind >= 0) { block_time = max(block_time, ps[j - 1][ind].second); } cur_time = max(e, block_time); } return cur_time; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...