제출 #361567

#제출 시각아이디문제언어결과실행 시간메모리
361567KoD커다란 상품 (IOI17_prize)C++17
0 / 100
1 ms1132 KiB
#include "prize.h"
#include <map>
#include <set>
#include <vector>

std::map<int, std::set<int>> trace;
std::vector<int> left;

int dfs(const int l, const int r) {
  if (l > r) {
    return -1;
  }
  const auto m = (l + r) / 2;
  const auto get = ask(m);
  left[m] = get[0];
  const auto sum = get[0] + get[1];
  if (sum == 0) {
    return m;
  }
  auto itr = trace[sum].insert(m).first;
  if (itr == trace[sum].begin() || left[*std::prev(itr)] != left[m]) {
    const auto tmp = dfs(l, m - 1);
    if (tmp != -1) {
      return tmp;
    }
  }
  if (itr == trace[sum].end() || left[*std::next(itr)] != left[m]) {
    const auto tmp = dfs(l, m - 1);
    if (tmp != -1) {
      return tmp;
    }
  }
  return -1;
}

int find_best(int n) {
  left.resize(n);
  return dfs(0, n - 1);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...