Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- ID: bradyawn
- PROG: cf
- LANG: C++11
- */
- #include <iostream>
- #include <algorithm>
- #include <iomanip>
- #include <fstream>
- #include <vector>
- #include <string>
- #include <cmath>
- #include <map>
- #include <utility>
- #include <algorithm>
- #include <set>
- #include <ctime>
- #include <queue>
- //#define inf cin
- //#define outf cout
- using namespace std;
- int main()
- {
- //ifstream inf("");
- //ofstream outf("");
- //cout << setprecision(10);
- int n, k;
- cin >> n >> k;
- vector<int> time(n);
- //for (int i = 0; i < n; i++) time[i] = i+1;
- vector<pair<int, int>> cost;
- for (int i = 0; i < n; i++)
- {
- int t;
- cin >> t;
- cost.push_back({t, i});
- }
- vector<pair<int, int>> retcost = cost;
- sort(cost.begin(), cost.end());
- int when = k+1;
- for (int i = cost.size()-1; i >= 0; i--)
- {
- if (time[cost[i].second] == 0) //dont overwrite
- {
- int bef = i; //store before finding
- while (cost[i].second+1 > when) {i--;}
- time[cost[i].second] = when;
- when++;
- if (i < bef) i = bef+1; //jump back
- }
- }
- unsigned long long ret = 0;
- for (int i = 0; i < n; i++)
- {
- ret += retcost[i].first * (time[i] - (i+1));
- }
- cout << ret << endl;
- for (int i = 0; i < n; i++) cout << time[i] << " \n"[i == n-1];
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement