Advertisement
dmkozyrev

c.cpp

May 8th, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.40 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int main() {
  6.     ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
  7.    
  8.     int n, k;
  9.     cin >> n >> k;
  10.    
  11.     vector<int> a(n); for (auto& it : a) cin >> it;
  12.    
  13.     vector<int> group(256, -1);
  14.     vector<int> gsize(256, 0);
  15.     function<void(int)> add_group_for_element = [&](int element) {
  16.         //cout << "add for it = " << element << endl;
  17.         int left = element;
  18.         while (left >= 0 && element - left < k && group[left] == -1) {
  19.            --left;
  20.         }
  21.         if (left >= 0 && group[left] != -1) {
  22.             if (gsize[group[left]] + element - left <= k) {
  23.                 for (int i = left+1; i <= element; ++i) {
  24.                     group[i] = group[left];
  25.                     gsize[group[i]]++;
  26.                     assert(gsize[group[i]] <= k);
  27.                 }
  28.                 return;
  29.             }
  30.         }
  31.         ++left;
  32.         // cout << "left = " << left << endl;
  33.         for (int i = left; i <= element; ++i) {
  34.             group[i] = left;
  35.             gsize[left]++;
  36.             //cout << "\tgroup[" << i << "] = " << left << endl;
  37.         }
  38.     };
  39.    
  40.     for (auto& it : a) {
  41.         if (group[it] == -1) {
  42.             add_group_for_element(it);
  43.         }
  44.         assert(group[it] != -1);
  45.         it = group[it];
  46.         cout << it << " ";
  47.     }
  48.     cout << endl;
  49.     return 0;
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement