//#include "festival.h"
#include<bits/stdc++.h>
using namespace std;
#define int long long
struct st{
int p,t,c;
}a[1000009];
int n;
bool cmp(st a1,st a2){
if(a1.t==a2.t&&a1.t==1){
return a1.p<a2.p;
}
return a1.p*a1.t*(a2.t-1)<a2.p*a2.t*(a1.t-1);
}
vector<int> dp;
vector<bool> zz[200009];
int l,r;vector<signed> ans;
void dfs(int x,int y){
if(x<l){
return;
}
if(y==0){
return;
}
if(zz[x][y]){
dfs(x-1,y-1);
ans.push_back(a[x].c);
}else{
dfs(x-1,y);
}
}
std::vector<signed> max_coupons(signed aa, std::vector<signed> pp, std::vector<signed> tt) {
int A;
A=aa;
vector<int> P,T;
P.clear(),T.clear();
for(int i=0;i<pp.size();i++){
P.push_back(pp[i]);
T.push_back(tt[i]);
}
for(int i=0;i<(int)P.size();i++){
a[i]={P[i],T[i],i};
}
n=P.size();
sort(a,a+n,cmp);
r=n;
while(r>0&&a[r-1].t==1){
r--;
}
l=r;
ans.clear();
for(int i=0;i<r;i++){
if((A-a[i].p)*a[i].t>=A){
A=(A-a[i].p)*a[i].t;ans.push_back(a[i].c);
if(A>1e16){
ans.clear();
for(int i=0;i<n;i++){
ans.push_back(a[i].c);
}
return ans;
}
}else{
l=i;
break;
}
}
for(int i=r+1;i<n;i++){
a[i].p+=a[i-1].p;
}
dp.clear();
dp.push_back(A);
for(int i=0;i<n;i++){
zz[i].clear();
}
for(int i=l;i<r;i++){
int g;
g=dp.size();
for(int j=0;j<g;j++){
zz[i].push_back(0);
}
if((dp[g-1]-a[i].p)*a[i].t>=0){
dp.push_back((dp[g-1]-a[i].p)*a[i].t);
zz[i].push_back(1);
}
for(int j=g-2;j>=0;j--){
if((dp[j]-a[i].p)*a[i].t>dp[j+1]){
dp[j+1]=(dp[j]-a[i].p)*a[i].t;
zz[i][j+1]=1;
}
}
}
int ma,ms;
ma=ms=0;
for(int i=0;i<dp.size();i++){
int p;
p=0;
int ll,rr;
ll=r,rr=n-1;
while(ll<rr){
int mid;
mid=ll+rr+1;
mid>>=1;
if(dp[i]>=a[mid].p){
p=mid-r+1;
ll=mid;
}else{
rr=mid-1;
}
}
if(i+p>ma){
ma=i+p;
ms=i;
}
}
dfs(r-1,ms);
A=dp[ms];
for(int i=n-1;i>r;i--){
a[i].p-=a[i-1].p;
}
for(int i=r;i<n;i++){
if(A>=a[i].p){
A-=a[i].p;
ans.push_back(a[i].c);
}
}
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... |