제출 #1361313

#제출 시각아이디문제언어결과실행 시간메모리
1361313kunzaZa183Overtaking (IOI23_overtaking)C++20
9 / 100
3 ms344 KiB
#include "overtaking.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define int long long

vector<vector<ll>> t;
vector<ll> w;
vector<int> s;
vector<vector<int>> all;
int n, x;
void init(int32_t L, int32_t N, vector<ll> T, vector<int32_t> W, int32_t X,
          int32_t M, vector<int32_t> S) {

  for (auto a : S)
    s.push_back(a);
  x = X;
  t.resize(M);
  for (int i = 0; i < N; i++) {
    if (W[i] > X) {
      w.push_back(W[i]);
      t[0].push_back(T[i]);
    }
  }
  n = w.size();

  all.resize(M);
  all[0].resize(n);
  iota(all[0].begin(), all[0].end(), 0);
  sort(all[0].begin(), all[0].end(), [&](int a, int b) {
    if (t[0][a] != t[0][b])
      return t[0][a] < t[0][b];
    return w[a] < w[b];
  });

  for (int i = 1; i < M; i++) {
    t[i].resize(n);
    for (int j = 0; j < n; j++) {
      t[i][j] = t[i - 1][j] + (s[i] - s[i - 1]) * w[j];
    }
    for (int j = 1; j < n; j++) {
      t[i][all[i - 1][j]] = max(t[i][all[i - 1][j]], t[i][all[i - 1][j - 1]]);
    }

    all[i] = all[i - 1];

    sort(all[i].begin(), all[i].end(), [&](int a, int b) {
      if (t[i][a] != t[i][b])
        return t[i][a] < t[i][b];
      return w[a] < w[b];
    });
  }

  w.push_back(x);
}

ll arrival_time(ll Y) {
  t[0].push_back(Y);
  n++;
  assert(t[0].size() == w.size());

  ll ta = Y;
  for (int i = 1; i < s.size(); i++) {
    ta += (s[i] - s[i - 1]) * x;

    auto cmp = [&](int in1, int in2) { return t[i - 1][in1] < t[i - 1][in2]; };

    int in =
        lower_bound(all[i].begin(), all[i].end(), n - 1, cmp) - all[i].begin();

    if (in > 0) {
      ta = max(ta, t[i][all[i][in - 1]]);
    }

    t[i].push_back(ta);
  }

  n--;
  for (int i = 0; i < t.size(); i++)
    t[i].pop_back();

  return ta;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…