2412021-03-05 15:23:06balintttÓvodacpp14Accepted 50/50103ms6728 KiB
#include<bits/stdc++.h>

using namespace std;

class gyerek{
public:
    int sz, e;
    int index;
    int t=-1;
};

int n, m;

vector<int> mx;
vector<int> db;

vector<gyerek> p;

bool operator<(const gyerek& g1, const gyerek& g2){
    return g1.e > g2.e;
}

bool cmp1(const gyerek& g1, const gyerek& g2){
    return g1.index < g2.index;
}


int main(){
    cin >> n >> m;
    mx.resize(m);
    db.resize(m);
    for(int i=0;i<m;i++){
        cin >> mx[i];
    }
    p.resize(n);
    for(int i=0;i<n;i++){
        cin >> p[i].sz;
        --p[i].sz;
        p[i].index = i;
    }
    for(int i=0;i<n;i++){
        cin >> p[i].e;
        p[i].index = i;
    }
    sort(p.begin(), p.end());
    stack<int> ava;
    for(int i=0;i<n;i++){
        if(db[p[i].sz] < mx[p[i].sz]){
            p[i].t = p[i].sz;
            ++db[p[i].sz];
        } else {
            ava.push(i);
        }
    }
    int poi = n-1;
    for(int i = 0;i<m;i++){
        if(db[i] == 0){
            if(ava.size()){
                p[ava.top()].t = i;
                ++db[i];
                ava.pop();
            } else {
                while(db[p[poi].t] <2){
                    --poi;
                }
                --db[p[poi].t];
                p[poi].t = i;
                ++db[i];
            }
        }
    }
    stack<int> av;
    for(int i=0;i<m && av.size() < ava.size();i++){
        for(int j=0;j<mx[i]-db[i];j++){
            av.push(i);
        }
    }
    while(ava.size()){
        p[ava.top()].t = av.top();
        av.pop();
        ava.pop();
    }
    sort(p.begin(), p.end(), cmp1);
    long long er=0;
    for(int i=0;i<n;i++){
        //cout << p[i].t << ' ';
        er+=(p[i].t!=p[i].sz)*p[i].e;
    }
    cout << er << '\n';
    for(int i=0;i<n;i++){
        cout << p[i].t+1 << ' ';
        //er+=(p[i].t!=p[i].sz)*p[i].e;
    }
return 0;
}
SubtaskSumTestVerdictTimeMemory
base50/50
1Accepted0/02ms1768 KiB
2Accepted0/04ms2000 KiB
3Accepted2/21ms1876 KiB
4Accepted2/21ms1876 KiB
5Accepted2/21ms1884 KiB
6Accepted2/21ms1884 KiB
7Accepted2/21ms1888 KiB
8Accepted2/21ms1896 KiB
9Accepted2/21ms1904 KiB
10Accepted2/21ms1904 KiB
11Accepted2/21ms1908 KiB
12Accepted2/21ms1912 KiB
13Accepted2/22ms1932 KiB
14Accepted3/32ms1948 KiB
15Accepted3/310ms2392 KiB
16Accepted3/325ms3176 KiB
17Accepted3/337ms3472 KiB
18Accepted3/370ms4640 KiB
19Accepted3/3101ms4704 KiB
20Accepted3/383ms5676 KiB
21Accepted3/386ms5552 KiB
22Accepted4/4103ms6728 KiB