#include "souvenirs.h"
#include <bits/stdc++.h>
#define F first
#define S second
#define lol ios::sync_with_stdio(false);cin.tie(NULL);
typedef long long ll;
typedef long double ld;
using namespace std;
const ll M = 1000000007;
void process(vector<int> seq, ll sum, vector<ll> &P, vector<ll> &cnt) {
    vector<int> v;
    for(auto & x : seq) {
        if(P[x] == -1) v.push_back(x);
        else sum -= P[x];
    }
    ll k = v.size();
    if(k == 0) return;
    if(k == 1) {
        P[v[0]] = sum;
        return;
    }
    auto res = transaction(sum / k);
    for(auto & x : res.F) cnt[x]++;
    process(res.F, sum / k - res.S, P, cnt);
    process(v, sum, P, cnt);
}
void buy_souvenirs(int N, long long P0) {
    vector<ll> P(N,-1), cnt(N,0); P[0] = P0;
    for(ll i=1; i<N; i++) {
        if(P[i] != -1) continue;
        auto res = transaction(P[i-1] - 1);
        for(auto & x : res.F) cnt[x]++;
        process(res.F, P[i-1] - 1 - res.S, P, cnt);
    }
    for(ll i=0; i<N; i++) for(ll j=cnt[i]; j<i; j++) transaction(P[i]);
    return;
}
| # | 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... |