#include #include #include #include #define MAXN 1000001 using namespace std; long long b,pen1=0; struct pruch{ long long p; long long h; int ind; }; struct dupka{ long long currdep; vector s; }; bool cmp(pruch a,pruch b){ if(a.p!=b.p) return a.p>b.p; return a.hb.h; return a.p>b.p; } bool cmp2(pruch a,pruch b){ if(a.h!=b.h) return a.hb.p; } int a[MAXN]; pruch stck[MAXN],stck1[MAXN]; dupka holes[MAXN],holes1[MAXN]; int n,dob[MAXN],inx[MAXN]; vector valid; int bsearch(long long val,int l,int r){ int mid; while(lval) return -1; return l; } long long currans=0,avgp=0; bool used[MAXN]; long long cii; int main(){ srand(69); ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); freopen("sticks.in","r",stdin); freopen("sticks.out","w",stdout); cin>>n>>b; for(int i=0;i>stck[i].h; stck[i].ind=i+1; holes[i].currdep=b; holes1[i].currdep=b; inx[i]=i; } for(int i=0;i>stck[i].p; avgp+=stck[i].h; stck1[i]=stck[i]; } bool kvo=false; if(n<=10){ vector anss[MAXN]; long long esth; esth=n*avgp/b; esth=3*esth*(esth-1)+1; // esth=esth/2*3; int ci,ansci=-1,br=0; currans=LLONG_MAX; do{ ci=0; long long pen=0; for(int i0=0;i0b){ holes[ci].s.push_back(stck[i].ind); holes[ci].currdep=-1; pen+=stck[i].p; ci++; continue; } if(holes[ci].currdep-stck[i].h<0){ if(stck[i].pb){ holes[ci].s.push_back(stck[i].ind); holes[ci].currdep=-1; pen+=stck[i].p; ci++; used[i]=true; continue; } long long val=holes[ci].currdep; if(holes[ci].currdep-stck[i].h<0 && i!=kol-1 && vind!=valid.size()-1){ int indd=bsearch(val,vind,valid.size()-1); // cout<val) indd++; int in1=indd; indd=valid[indd]; // cout<<"vlizam "<b){ holes[ci].s.push_back(stck[i].ind); holes[ci].currdep=-1; pen+=stck[i].p; ci++; continue; } if(holes[ci].currdep-stck[i].h<0) ci++; holes[ci].currdep-=stck[i].h; holes[ci].s.push_back(stck[i].ind); } if(holes[ci].currdep==b) ci--; ci++; currans=ci*ci*ci+pen; cii=ci; for(int i=ci-1;i>=0;i--){ int ind=0,sz=holes[i].s.size(); int naob=sz-1; bool krai=false; for(int i2=0;i20){ if(ind>naob){ krai=true; break; } int tempp1=holes[i].s[naob]; int tempp=holes[i].s[ind]; /* if(holes[i1].currdep-stck1[tempp1-1].h<0 && holes[i1].currdep-stck1[tempp-1].h<0){ // cout<<"vlizam "<0){ holes[i1].s.pop_back(); dob[i1]--; } } cii++; break; } } //cout<=0;i--){ if(i1000){ // pen1*=5; } //cout<25000000000001) return 0; cii=ci; cout<