Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma comment(linker, "/STACK:65777216")
- #include <cstdio>
- #include <cstdlib>
- #include <iostream>
- #include <string>
- #include <string.h>
- #include <vector>
- #include <queue>
- #include <stack>
- #include <map>
- #include <set>
- #include <time.h>
- #include <cmath>
- #include <algorithm>
- #include <malloc.h>
- #define pb push_back
- #define mp make_pair
- #define fi first
- #define se second
- #define sz(x) ((int) (x).size())
- #define forn(var, lim) for(int var=0; var<lim; ++var)
- #define all(x) (x).begin(), (x).end()
- #define abs(x) ((x)>=0 ? (x) : -(x))
- using namespace std;
- typedef long long ll;
- typedef pair<int, int> ii;
- typedef vector<int> vi;
- typedef vector<bool> vb;
- typedef vector<ii> vii;
- typedef vector<vi> vvi;
- typedef vector<vb> vvb;
- struct she{
- int x, num;
- };
- struct team{
- int x, num, sh;
- };
- bool inline operator < (she a, she b) {
- return a.x<b.x;
- }
- bool inline operator < (team a, team b) {
- return a.x<b.x;
- }
- int main(int argc, char **argv) {
- int n, m;
- scanf("%d", &n);
- team* b=new team[n];
- forn(i, n) {
- scanf("%d", &b[i].x);
- b[i].num=i;
- }
- sort(b, b+n);
- scanf("%d", &m);
- she* a=new she[m];
- forn(i, m) {
- scanf("%d", &a[i].x);
- a[i].num=i;
- }
- sort(a, a+m);
- vvi c(n);
- forn(i, n) {
- b[i].sh=a[i].num;
- c[i].pb(i);
- }
- for(int i=m; i<n; i++) {
- b[i].sh=a[m-1].num;
- ll cmax=0;
- int ind;
- ll ct=0;
- for(int k=m-1; k>0 && c[k].size()==1;k--) {
- ct+=abs(b[c[k][0]].x-a[k].x)-abs(b[c[k][0]].x-a[k-1].x);
- if(ct>cmax) {
- cmax=ct;
- ind=k;
- }
- }
- if(cmax>0) {
- for(int k=ind; k<m; k++) {
- b[c[k][0]].sh=a[k-1].num;
- c[k-1].pb(c[k][0]);
- c[k].clear();
- }
- }
- c[m-1].pb(i);
- }
- ll ans=0;
- vi res(n);
- forn(i, m) {
- forn(j, c[i].size()) {
- ans+=abs(b[c[i][j]].x-a[i].x);
- res[b[c[i][j]].num]=a[i].num;
- }
- }
- cout << ans << endl;
- forn(i, n) {
- if(i) printf(" ");
- printf("%d", res[i]+1);
- }
- printf("\n");
- return 0;
- }
Add Comment
Please, Sign In to add comment