Submission #1242493

#TimeUsernameProblemLanguageResultExecution timeMemory
1242493uroskOvertaking (IOI23_overtaking)C++20
65 / 100
3599 ms33348 KiB
#include "overtaking.h" #include "bits/stdc++.h" #define pb push_back #define popb pop_back #define fi first #define sc second #define si(a_) (ll)(a_.size()) #define all(a_) a_.begin(),a_.end() #define here cerr<<"========================================\n" #define dbg(X_) cerr<<#X_<<": "<<X_<<endl; #define ceri(a_,l_,r_) {for(ll i_=l_;i_<=r_;i_++) cerr<<a_[i_]<<" ";cerr<<endl;} using namespace std; using ll = long long; using pll = pair<ll,ll>; const ll maxn = 1005; ll n,l,m; ll st[maxn],w[maxn]; ll s[maxn]; ll e[maxn][maxn]; ll t[maxn][maxn]; ll id[maxn][maxn]; ll x; ll curt[maxn]; ll pmx[maxn][maxn]; void init(int L, int N, std::vector<long long> T, std::vector<int> W, int X, int M, std::vector<int> S) { n = N,l = L,m = M,x = X; for(ll i = 1;i<=n;i++) st[i] = T[i-1]; for(ll i = 1;i<=n;i++) w[i] = W[i-1]; for(ll i = 1;i<=m;i++) s[i] = S[i-1]; for(ll i = 1;i<=n;i++) t[1][i] = st[i]; for(ll j = 2;j<=m;j++){ for(ll i = 1;i<=n;i++){ e[j][i] = t[j-1][i] + w[i]*(s[j]-s[j-1]); } for(ll i = 1;i<=n;i++) curt[i] = t[j-1][i];; iota(id[j]+1,id[j]+1+n,1); sort(id[j]+1,id[j]+1+n,[](ll x,ll y){ return curt[x]<curt[y]; }); ll last = 0; for(ll ik = 1;ik<=n;ik++){ ll i = id[j][ik]; ll ig = id[j][ik-1]; pmx[j][i] = max(pmx[j][ig],e[j][i]); } for(ll ik = 1;ik<=n;ik++){ ll i = id[j][ik]; ll ig = id[j][ik-1]; if(curt[i]!=curt[ig]) last = ig; t[j][i] = max(pmx[j][last],e[j][i]); } // cerr<<w[n]*(s[j]-s[j-1])<<endl; // ceri(e[j],1,n); // ceri(t[j],1,n); } return; } long long arrival_time(long long Y) { ll y = Y; // here; // dbg(Y); for(ll j = 2;j<=m;j++){ ll mxt = y+(s[j]-s[j-1])*x; ll tl = 1,tr = n,mid,rez = -1; while(tl<=tr){ mid = (tl+tr)/2; if(t[j-1][id[j][mid]]<y) rez = mid,tl = mid+1; else tr = mid-1; } if(rez==-1) y = mxt; else y = max(mxt,pmx[j][id[j][rez]]); // cerr<<w[n]*(s[j]-s[j-1])<<endl; // ceri(e[j],1,n); // ceri(t[j],1,n); } return y; }
#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...