#include #define ll long long using namespace std; ll n,b,br,suma,skor,r,br2,br6,suma6,suma2,skor2,spenalty2,minskor=2e18,minskor2=2e18,br3,suma3,skor3,skor4,skor5,minskor4=2e18,suma4,br4,spenalty4,minim,minko,br8,suma8,spenalty8,brp,skor8,spenalty,br5,suma5,skor6,skor7,suma7,br7; vectorrupe[1000005],rupke[25],perm,perma,ruponi[25],permo,rupaa[25],rupicice[1000005],rupcage[1000005],rupasi[1000005],rup[600005]; struct slog{ ll h,p,index; bool ubacen; }stix[1000005]; void unos(){ scanf("%lld",&n); scanf("%lld",&b); for(ll i=1;i<=n;i++) scanf("%lld",&stix[i].h); for(ll i=1;i<=n;i++){ scanf("%lld",&stix[i].p); stix[i].index=i; stix[i].ubacen=0; }//unos gotov } bool cmp(slog a, slog b){ if(a.h!=b.h) return a.hb.p; } bool cmp2(slog a,slog b){return a.indexb){ if(!stix[r].ubacen){ rupe[br].pop_back(); rupe[br].push_back(stix[r].index); spenalty+=stix[r].p; stix[r].ubacen=true; stix[i].ubacen=false; r--; suma=0; br++; i-=2; } } } else if(suma==b){ suma=0; br++; } } if(suma==0) br--; skor=br*br*br+spenalty; } void alg2(){ sort(stix+1,stix+n+1,cmp); do{ br2=1; for(ll i=1;i<=n;i++){ rupke[br2].push_back(stix[i].index); suma2+=stix[i].h; if(suma2>=b){ br2++; suma2=0; spenalty2+=stix[i].p; } } if(suma2==0)br2--; if(rupke[br2].size()>0)br2++; skor2=br2*br2*br2+spenalty2; if(skor2b){suma5=0;br5++;} } } if(suma5==0)br5--; skor5=br5*br5*br5; } void obraditotelo(){ for(ll i=1;i<=n;i++)stix[i].ubacen=false; sort(stix+1,stix+n+1,cmp2); br6=1; for(ll i=1;i<=n;i++){ if(!stix[i].ubacen){ stix[i].ubacen=true; rupcage[br6].push_back(stix[i].index); suma6+=stix[i].h; if(suma6+stix[i+1].h>b){suma6=0;br6++;} } } if(suma6==0)br6--; skor6=br6*br6*br6; } void alg4(){ sort(stix+1,stix+n+1,cmp); do{ br4=1; for(ll i=1;i<=n;i++)stix[i].ubacen=0; int q=n; for(ll i=1;i<=n;i++){ if(!stix[i].ubacen){ rupaa[br4].push_back(stix[i].index); suma4+=stix[i].h; stix[i].ubacen=true; if(suma4>=b){ if(!stix[q].ubacen){ stix[i].ubacen=false; rupaa[br4].pop_back(); stix[q].ubacen=true; rupaa[br4].push_back(stix[q].index); suma4=0; spenalty4+=stix[q].p; br4++; q--; i-=2; } } } } if(suma4==0)br4--; skor4=br4*br4*br4+spenalty4; if(skor4b ){ suma7=0;br7++; y--; } else if(suma7+stix[i].h<=b){ rupasi[br7].push_back(stix[i].index); stix[i].ubacen=true; suma7+=stix[i].h; } } if(suma7==0)br7--; skor7=br7*br7*br7; } void alg3(){ sort(stix+1,stix+n+1,cmp2); do{ br3=1; for(ll i=1;i<=n;i++){ ruponi[br3].push_back(stix[i].index); suma3+=stix[i].h; if((suma3+stix[i+1].h)>b){suma3=0;br3++;} } if(suma3==0)br3--; skor3=br3*br3*br3; if(skor3b.h;} void npolarupa(){ for(int i=1;i<=n;i++)stix[i].ubacen=false; ll a=1; sort(stix+1,stix+n+1,cmp); for(int i=1;i<=n;i++){ if(i<=(n/2+n%2)){ if(!stix[i].ubacen){ stix[i].ubacen=true; rup[i].push_back(stix[i].index); suma8+=stix[i].h; if(suma8>b){suma8=0;spenalty8+=stix[i].p;} } } if((i==n/2+n%2) && (brp==0)){ sort(stix+1,stix+n+1,cmp3); brp++; i=1; } } br8=n/2+n%2; //cout<