Submission #1218481

#TimeUsernameProblemLanguageResultExecution timeMemory
1218481vaneaOvertaking (IOI23_overtaking)C++20
0 / 100
0 ms580 KiB
#include <bits/stdc++.h> #include "overtaking.h" using namespace std; using ll = long long; const int mxN = 1e3+10; int l, n;vector<ll> t; vector<int> w; int x; int m; vector<int> s; array<ll, 2> st[mxN][4*mxN]; void upd(int v, int node, int l, int r, int k, ll t, ll w) { if(l == r && l == k) { st[v][node] = {t, w}; return ; } if(l > k || r < k) return ; int mid = (l+r)/2; upd(v, node*2, l, mid, k, t, w); upd(v, node*2+1, mid+1, r, k, t, w); st[v][node] = max(st[v][node*2], st[v][node*2+1]); } int qry(int v, int node, int l, int r, ll x) { if(l == r) return l; int mid = (l+r)/2; if(st[v][node*2][0] >= x) return qry(v, node*2, l, mid, x); else return qry(v, node*2+1, mid+1, r, x); } ll qry1(int v, int node, int l, int r, int l1, int r1) { if(l1 <= l && r <= r1) return st[v][node][0]; if(l1 > r || r1 < l) return 0; int mid = (l+r)/2; return max(qry1(v, node*2, l, mid, l1, r1), qry1(v, node*2+1, mid+1, r, l1, r1)); } void init(int L, int N, vector<ll> T, vector<int> W, int X, int M, vector<int> S) { l = L; n = N; t = T; w = W; x = X; m = M; s = S; set<array<ll, 3>> buses; for(int i = 0; i < n; i++) { buses.insert({t[i], w[i], i}); } int idx = 0; for(auto [t, w, _] : buses) { upd(0, 1, 0, n-1, idx, t, w); ++idx; } for(int i = 1; i < m; i++) { set<array<ll, 3>> nxt; for(auto [t, w, idx] : buses) { ll f = t + w * (s[i] - s[i-1]); ll s; if(nxt.empty()) s = 0; else { auto it = prev(nxt.end()); s = (*it)[0]; } ll now = max(f, s); nxt.insert({now, w, idx}); } swap(buses, nxt); idx = 0; for(auto [t, w, _] : buses) { upd(i, 1, 0, n-1, idx, t, w); ++idx; } } } ll calculate_arrival_time(ll Y) { ll last = Y, cnt = Y > st[0][1][0] ? n : qry(0, 1, 0, n-1, Y); for(int j = 1; j < m; j++) { ll f = last + x * (s[j] - s[j-1]); ll s = qry1(j, 1, 0, n-1, 0, cnt-1); last = max(f, s); cnt = last > st[j][1][0] ? n : qry(j, 1, 0, n-1, last); if(j == m-1) return last; } } ll arrival_time(ll Y) { return calculate_arrival_time(Y); }

Compilation message (stderr)

overtaking.cpp: In function 'll calculate_arrival_time(ll)':
overtaking.cpp:78:1: warning: control reaches end of non-void function [-Wreturn-type]
   78 | }
      | ^
#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...