#include "souvenirs.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ff first
#define ss second
void buy_souvenirs(int n, ll p0) {
    ll pl = max(1ll, p0 - 2ll * (n - 1));
    vector<ll> p(n), cnt(n);
    while (pl < p0) {
        auto res = transaction(pl);
        if (res.ff.size() == 1) {
            p[n - 1] = pl;
            break;
        }
        pl++;
    }
    if (p[n - 1] == 0) {
        p[n - 1] = p0 - 1;
    }
    cnt[n - 1]++;
    for (int i = n - 2; i >= 0; i--) {
        auto res = transaction(p[i + 1] + 1);
        if (res.ff[0] == i) {
            cnt[i]++;
            p[i] = p[i + 1] + 1;
        } else {
            cnt[i + 1]++;
            p[i] = p[i + 1] + 2;
        }
    }
    for (int i = 1; i < n; i++) {
        for (int j = cnt[i]; j < i; j++) {
            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... |