#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) {
	long long B = A;
	vector<int> val1;
	vector<long long> pre1 = {0};
	vector<int> rem;
	for(int i=0;i<(int)P.size();i++) {
		if(T[i] == 1)
			val1.push_back(i);
		else
			rem.push_back(i);
	}
	sort(val1.begin(),val1.end(), [&P](int x, int y) {return P[x] < P[y];});
	for(auto i: val1)
		pre1.push_back(pre1.back()+P[i]);
	sort(rem.begin(),rem.end(),[&P,&T](int x, int y) {
		return 1LL * P[x] * T[x] * (T[y] - 1) < 1LL * P[y] * T[y] * (T[x] - 1);
	});
	vector<int> impt;
	vector<int> ans, mid;
	for(auto i: rem) {
		if(1LL * T[i] * (B - P[i]) >= B) {
			B = min(1LL<<60, 1LL * T[i] * (B - P[i]));
			ans.push_back(i);
		} else
			impt.push_back(i);
	}
	int N = impt.size();
	long long dp[N+1][35];
	memset(dp,-1,sizeof(dp));
	dp[0][0] = B;
	for(int i=0;i<N;i++) {
		for(int j=0;j<35;j++)
			dp[i+1][j] = dp[i][j];
		for(int j=0;j<34;j++)
			dp[i+1][j+1] = max(dp[i+1][j+1],1LL * T[impt[i]] * (dp[i][j] - P[impt[i]]));
	}
	pair<int,int> bst = {-1,-1};
	for(int j=0;j<35;j++)
		if(dp[N][j] >= 0) {
			int cnt = upper_bound(pre1.begin(),pre1.end(),dp[N][j]) - pre1.begin() - 1;
			bst = max(bst, {j+cnt, j});
		}
	int j = bst.second;
	int cnt = upper_bound(pre1.begin(),pre1.end(),dp[N][j]) - pre1.begin() - 1;
	for(int i=N;i--;) {
		if(dp[i+1][j] != dp[i][j]) {
			mid.push_back(impt[i]);
			j--;
		}
	}
	reverse(mid.begin(),mid.end());
	for(auto i: mid)
		ans.push_back(i);
	for(int i=0;i<cnt;i++)
		ans.push_back(val1[i]);
	return ans;
}
| # | 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... |