Submission #1241416

#TimeUsernameProblemLanguageResultExecution timeMemory
1241416mychecksedadOvertaking (IOI23_overtaking)C++17
65 / 100
3594 ms47536 KiB
#include "overtaking.h"
#include<bits/stdc++.h>
using namespace std;
#define vi vector<int>
#define pii pair<int,int>
#define ff first
#define ss second
#define all(x) x.begin(),x.end()
#define pb push_back
#define ll long long int
const int N = 2000;


ll dp[N][N], X;
pair<ll, ll> pref[N][N];
int n, m;
vi W, S;
vector<ll> T;
void init(int L, int nn, std::vector<long long> TT, std::vector<int> WW, int XX, int mm, std::vector<int> SS)
{
  X = XX;
  S = SS;
  W = WW;
  T = TT;
  n = nn;
  m = mm;
  W.pb(X);
  for(int i = 0; i < n; ++i) dp[0][i] = T[i];
  for(int i = 1; i < m; ++i){
    ll dif = S[i] - S[i - 1];
    vector<pair<ll, int>> q;
    for(int j = 0; j < n; ++j) q.pb({dp[i-1][j], j});
    sort(all(q));
    ll last = 0ll, last2 = 0ll;
    for(int j = 0; j < n; ++j){
      int p = q[j].ss;
      dp[i][p] = max(last, dp[i - 1][p] + dif * W[p]);
      last2 = max(last2, dp[i][p]);
      if(j + 1 < n && q[j+1].ff != q[j].ff) last=max(last,last2);
    }
    pref[i-1][0] = {q[0].ff, dp[i][q[0].ss]};
    for(int j = 1; j < n; ++j){
      pref[i-1][j].ff = q[j].ff;
      pref[i-1][j].ss = max(
        pref[i-1][j-1].ss,
        dp[i][q[j].ss]
      );
    }
  }
  return;
}

long long arrival_time(long long Y)
{
  T.pb(Y);
  ll cur = Y;
  for(int i = 0; i + 1 < m; ++i){
    ll nxt = cur + (S[i + 1] - S[i]) * X;
    int pos = lower_bound(pref[i], pref[i] + n, pair<ll, ll>{cur, -1}) - pref[i];
    --pos;
    if(pos >= 0) nxt = max(nxt, pref[i][pos].ss);
    cur = nxt;
  }
  T.pop_back();
  return cur;
}
#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...