# include using namespace std; const clock_t begin_time = clock(); float Time = 1.0; mt19937 rand_Gen(758965475); long long N,M,A,B; const long long maxn = 100005; long long p[maxn]; bool gett[maxn]; bool had[maxn]; long long ANS=1e18; vector maxans; vector curr; struct task { long long id,p; }; vector z; long long MIN(long long A, long long B) { if(AN)return 0; if(a<=0) { ans= ((b-1)*B + p[b]*A); } else ans= (abs(b-a)*B + abs(p[a]-p[b])*A); // cout< q; int i=from,j=mid+1; task y; y.id = 0; y.p = 0; deque l,r; for(i=from;i<=mid;i++) l.push_back(z[i]); for(i=mid+1;i<=to;i++) r.push_back(z[i]); q.push_back(y); while(!l.empty()||!r.empty()) { // cout<calcdist(q.back().id,r.back().id)) { q.push_back(r.back()); r.pop_back(); } else { q.push_back(r.front()); r.pop_front(); } // j++; continue; } if(r.empty()) { task best = l.front(); if(calcdist(q.back().id,best.id)>calcdist(q.back().id,l.back().id)) { q.push_back(l.back()); l.pop_back(); } else { q.push_back(l.front()); l.pop_front(); } continue; } long long ans1 = MIN(calcdist(q.back().id,l.front().id),calcdist(q.back().id,l.back().id)); long long ans2 = MIN(calcdist(q.back().id,r.front().id),calcdist(q.back().id,r.back().id)); if(ans1calcdist(q.back().id,l.back().id)) { q.push_back(l.back()); l.pop_back(); } else { q.push_back(l.front()); l.pop_front(); } continue; }else { // cout<<"H"<calcdist(q.back().id,r.back().id)) { q.push_back(r.back()); r.pop_back(); } else { q.push_back(r.front()); r.pop_front(); } // j++; continue; } } /* while(i<=mid||j<=to) { // cout<mid) { q.push_back(z[j]); j++; continue; } if(j>to) { q.push_back(z[i]); i++; continue; } if(calcdist(q.back().id,z[i].id)=ANS)return ; ANS = ans; maxans = curr; } void print() { //cout< > K; void create_massive(long long v) { K.clear(); long long i; for(i=1; i<=N; i++) { if(gett[i])continue; K.push_back({calc_diff(v,i),i}); } sort(K.begin(),K.end()); } void solve(long long solved, long long v, long long ans) { if(!lefttime()) { //print(); //exit(0); return ; } gett[v] = 1; curr.push_back(v); if(solved==M) { compare(ans); return ; } if(N<=0) { vector > k; long long i; for(i=1; i<=N; i++) { if(gett[i])continue; k.push_back({calc_diff(v,i),i}); } sort(k.begin(),k.end()); for(i=0; lefttime()&&icalcdist((i-1<0 ? 0 : curr[i-1]),a)+calcdist(a,((i+1)=M ? N+1 : curr[i+2])); long long ans2 = calcdist((i==0 ? 0 : curr[i-1]),curr[i+1])+calcdist(curr[i],(i+2>=M ? N+1: curr[i+2])); if(ans2>N>>M>>A>>B; long long i,j; for(i=1; i<=N; i++) cin>>p[i]; if(N>2000) { for(i=1;i<=N;i++) { task S; S.id =i; S.p = p[i]; z.push_back(S); } sort(z.begin(),z.end(),cmp); divsort(0,z.size()-1); long long bestans, firstt,current = calcdist(0,z[0].id); for(i=0;i