Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define all(a) a.begin(), a.end()
- #define forn(i, a, b) for (ll i = a; i < b; i++)
- using ll = long long;
- int main() {
- ll n, k;
- cin >> n >> k;
- vector< pair<ll, ll> > vec(n);
- vector<ll> inds(n);
- forn(i, 0, n) {
- cin >> vec[i].first;
- vec[i].second = i + 1;
- }
- sort(all(vec));
- reverse(all(vec));
- forn(i, 0, n) {
- inds[vec[i].second - 1] = i;
- }
- vector<ll> ans;
- map<ll, ll> uses;
- queue<pair<ll, ll>> q;
- forn(i, 0, n) {
- if (q.empty() or q.front().first - vec[i].first < k) {
- //unique solution
- ans.push_back(0);
- }
- else {
- ans.push_back(q.front().second);
- if (++uses[q.front().second] == 2) {
- q.pop();
- }
- }
- q.push(vec[i]);
- }
- if (count(all(ans), 0) > 1) {
- cout << -1;
- }
- else {
- forn(i, 0, n) {
- cout << ans[inds[i]] << ' ';
- }
- }
- cout << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment