#include "souvenirs.h"
#include <vector>
#include <algorithm>
// We know P[0] = P0.  We will fill in P[1..N-1] by binary search,
// then for each i = 1..N-1 we call transaction(P[i]) exactly i times
// to buy i souvenirs of type i.
void buy_souvenirs(int N, long long P0) {
    std::vector<long long> P(N);
    P[0] = P0;
    // 1) Learn P[1..N-1]:
    // For each i = 1..N-1, binary search P[i] in [1, P[i-1]-1].
    for (int i = 1; i < N; i++) {
        long long lo = 1, hi = P[i-1] - 1;
        while (lo < hi) {
            long long mid = (lo + hi) / 2;
            // mid < P[i-1] ≤ P0, so it's a valid M: 1 ≤ mid < P0
            auto res = transaction(mid);
            const auto &bought = res.first;
            // Did we buy type i?
            bool got_i = std::binary_search(bought.begin(), bought.end(), i);
            if (got_i) {
                // mid >= P[i], so P[i] ≤ mid
                hi = mid;
            } else {
                // mid < P[i]
                lo = mid + 1;
            }
        }
        P[i] = lo;
    }
    // 2) Now that we know all P[i], just buy exactly i of type i:
    //    calling transaction(P[i]) will buy exactly one of type i
    //    (and none cheaper, since after subtracting P[i] the remainder
    //     is zero), so repeat i times.
    for (int i = 1; i < N; i++) {
        for (int cnt = 0; cnt < i; cnt++) {
            transaction(P[i]);
        }
    }
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |