#include "festival.h"
#include <bits/stdc++.h>
using namespace std;
std::vector<int> max_coupons(int A, std::vector<int> P, std::vector<int> T) {
	vector<pair<int, int>> ones, twos;
	for (int i = 0; i < P.size(); i++) {
		if (T[i] == 1) ones.push_back({P[i], i});
		else twos.push_back({P[i], i});
	}
	ones.push_back({0, -1});
	sort(ones.begin(), ones.end());
	sort(twos.begin(), twos.end());
	int ans = 0, bestI = 0;
	for (int i = 1; i < ones.size(); i++) ones[i].first += ones[i - 1].first;
	for (int i = 0; i <= twos.size(); i++) {
		auto iter = upper_bound(ones.begin(), ones.end(), make_pair(A, INT_MAX));
		iter--;
		if (ans < i + (iter - ones.begin())) {
			ans = i + (iter - ones.begin());
			bestI = i;
		}
		if (i != twos.size()) A = 2 * (A - twos[i].first);
		if (A < 0) break;
	}
	vector<int> vans;
	for (int i = 0; i < bestI; i++) vans.push_back(twos[i].second);
	for (int i = bestI; i < ans; i++) vans.push_back(ones[i + 1].second);
	return vans;
}
| # | 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... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |