#include <bits/stdc++.h>
#define dbg(x) cerr << #x << " -> " << x << "\n"
using namespace std; 
using ll = long long;
using pii = pair<int,int>;
struct ticket {
    int p;
    int t;
    int idx;
};
vector<int> max_coupons(int A, vector<int> P, vector<int> T) {
    int n = P.size();
    vector<ticket> arr1;
    vector<pii> arr2;
    
    for(int i = 0; i < n; ++i){
        ticket t;
        t.p = P[i];
        t.t = T[i];
        t.idx = i;
        if(T[i] == 2)
        arr1.push_back(t);
        else
        arr2.push_back(pii{t.p,i});
    }
    
    sort(arr1.begin(),arr1.end(),[&](auto a, auto b) {
        return (a.p < b.p);
    });
    
    int m = arr1.size();
    int k = arr2.size();
    sort(arr2.begin(),arr2.end());
    
    ll curr = A;
    vector<int> R;
    vector<int> pref(k+1,0);
    for(int i = 1; i <= k; ++i){
        pref[i] = pref[i-1] + arr2[i-1].first;
    }
    int cnt = 0;
    int L,Rt;
    for(int i = -1; i < m; ++i){
        if(i == -1){
            int l = 0;
            int r = k;
            while(r - l > 0){
				int m = (l+r+1)/2;
				if(pref[m] <= curr) l = m;
				else r = m-1;
			}
            cnt = l;
            L=-1;
            Rt=l-1;
            continue;
        }
        curr -= arr1[i].p;
        curr *= arr1[i].t;
        if(curr < 0) break;
        if(curr > 2e15) curr = 2e15;
        int l = 0;
        int r = k;
        while(r - l > 0){
            int m = (l+r+1)/2;
			if(pref[m] <= curr) l = m;
			else r = m-1;
        }
        if(l+i+1 > cnt) {
            L=i;
            Rt=l-1;
            cnt = l+i+1;
        }
    }
    for(int i = 0; i <= L;++i){
        R.emplace_back(arr1[i].idx);
    }
    for(int j = 0; j <= Rt;++j){
        R.emplace_back(arr2[j].second);
    }
    return R;
}
// int main() {
//     vector<int> R;
    
//     R = max_coupons(9, vector<int>{1,1,1,1}, vector<int>{1,2,2,2});
    
//     for(auto &i : R) cout << i << " ";
// }
| # | 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... |