#include "tickets.h"
#include <bits/stdc++.h>
#define all(a) a.begin(), a.end()
using namespace std;
typedef long long ll;
ll find_maximum(int k, vector<vector<int>> a) {
    int n = a.size();
    int m = a[0].size();
    vector<int> up(n);
    vector<int> down(n);
    ll sum = 0;
    priority_queue<pair<ll, int>, vector<pair<ll, int>>, greater<pair<ll, int>>> pq;
    for (int i = 0; i < n; i++) {
        up[i] = k;
        down[i] = 0;
        for (int j = m - k; j < m; j++) {
            sum += a[i][j];
        }
        pq.push({a[i][m - k] + a[i][0], i});
    }
    for (int it = 1; it <= n * k / 2; it++) {
        pair<ll, int> x = pq.top();
        pq.pop();
        sum -= x.first;
        down[x.second]++;
        up[x.second]--;
        if (up[x.second] != 0) {
            pq.push({a[x.second][m - up[x.second]] + a[x.second][down[x.second]], x.second});
        }
    }
    vector<vector<int>> sol(n, vector<int>(m, -1));
    vector<int> small(k, 0), big(k, 0);
    set<pair<int, int>> set_small, set_big;
    for (int i = 0; i < k; i++) {
        set_small.insert({small[i], i});
        set_big.insert({small[i], i});
    }
    int i = n - 1;
    while (i >= 0) {
        int x = up[i];
        int r = 0;
        vector<int> add_back;
        for (int it = 0; it < m; it++) {
            if (it < k - x) {
                int r = set_small.begin()->second; 
                sol[i][it] = r;
                set_small.erase(set_small.begin());
                set_big.erase({big[r], r});
                add_back.push_back(r);
                small[r]++;
            }
            if (m - it <= x) {
                int r = set_big.begin()->second; 
                sol[i][it] = r;
                set_big.erase(set_big.begin());
                set_small.erase({small[r], r});
                add_back.push_back(r);
                big[r]++;
            }
        }
        for (auto x : add_back) {
            set_small.insert({small[x], x});
            set_big.insert({big[x], x});
        }
        i--;
    }
    allocate_tickets(sol);
    return sum;
}
| # | 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... |