#include "festival"
#include <bits/stdc++.h>
using namespace std;
#define all(v) (v).begin(), (v).end()
vector<int> max_coupons(int a, vector<int> p, vector<int> t) {
    vector<pair<int, int>> t1, t2;
    for (int i = 0; i < p.size(); i++) {
        if (t[i] == 1) t1.push_back({p[i], i});
        else t2.push_back({p[i], i});
    }
    
    sort(all(t1));
    sort(all(t2));
    for (int i = 1; i < t1.size(); i++) t1[i].first += t1[i - 1].first;
    
    int idx = -1, cur = a, ans = upper_bound(all(t1), make_pair(a, 0)) - t1.begin();
    for (int i = 0; i < t2.size(); i++) {
        if (cur < t2[i].first) break;
        cur = (cur - t2[i].first) * 2;
        int cur_val = (upper_bound(all(t1), make_pair(cur, 0)) - t1.begin()) + i + 1;
        if (cur_val > ans) {
            ans = cur_val;
            idx = i;
        }
    }
    
    vector<int> v;
    int cur_ans = a;
    for (int i = 0; i <= idx; i++) {
        cur_ans = (cur_ans - t2[i].first) * 2;
        v.push_back(t2[i].second);
    }
    
    int cur_idx = 0;
    while (cur_idx < t1.size()) {
        if (cur_ans < t1[cur_idx].first) break;
        v.push_back(t1[cur_idx++].second);
    }
    return v;
}
| # | 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... |