Submission #1046317

#TimeUsernameProblemLanguageResultExecution timeMemory
1046317slivajanOvertaking (IOI23_overtaking)C++17
65 / 100
3531 ms34132 KiB
#include "overtaking.h" #include <bits/stdc++.h> using namespace std; typedef long long un; typedef vector<un> vuc; typedef tuple<un, un, un> tup; #define REP(i, a, b) for (un i = (un)a; i < (un)b; i++) #define FEAC(i, a) for (auto&& i : a) #define vec vector #define ALL(x) (x).begin(), (x).end() constexpr un INF = INT64_MAX; vec<vuc> prij; vec<vec<tup>> seraz; un speed; vuc _S; un _M; void init(int L, int N, std::vector<long long> T, std::vector<int> W, int X, int M, std::vector<int> S) { speed = X; _S = vuc(M); REP(i, 0, M) _S[i] = S[i]; vuc _W(N); REP(i, 0, N) _W[i] = W[i]; _M = M; prij = vec<vuc>(M, vuc(N, -1)); prij[0] = T; REP(e, 0, M-1){ vec<tup> toSort; REP(i, 0, N){ toSort.push_back({prij[e][i], _W[i], i}); } sort(ALL(toSort)); seraz.push_back(toSort); un limit = 0; REP(i, 0, N){ un odjezd, index; tie(odjezd, ignore, index) = toSort[i]; limit = max(limit, odjezd + _W[index] * (_S[e+1] - _S[e])); prij[e+1][index] = limit; } } } long long arrival_time(long long Y) { un now = Y; REP(e, 0, _M-1){ tup what = {now, speed, -1}; auto ptr = upper_bound(ALL(seraz[e]), what); if (ptr == seraz[e].begin()){ now += speed * (_S[e+1] - _S[e]); } else{ ptr--; un snek; tie(ignore, ignore, snek) = *ptr; now = max(now + speed * (_S[e+1] - _S[e]), prij[e+1][snek]); } } return now; }
#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...