fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. vector<int>fun(vector<int>&arr,int d){
  5. unordered_map<int,int>mp;
  6. for(int num:arr){
  7. mp[num]++;
  8. }
  9. priority_queue<pair<int,int>>heap;
  10. for(auto&[num,freq]:mp){
  11. heap.push({freq,num});
  12. }
  13. queue<pair<int,int>>wait;
  14. vector<int>ans;
  15. int i=0;
  16. while(!heap.empty()||!wait.empty()){
  17. if(!wait.empty()&&wait.front().first<=i){
  18. int num=wait.front().second;
  19. wait.pop();
  20. if(mp[num]>0){
  21. heap.push({mp[num],num});
  22. }
  23. }
  24. if(heap.empty())return{};
  25. auto[freq,num]=heap.top();
  26. heap.pop();
  27. ans.push_back(num);
  28. mp[num]--;
  29. if(mp[num]>0){
  30. wait.push({i+d,num});
  31. }
  32. i++;
  33. }
  34. return ans;
  35. }
  36.  
  37. int main(){
  38. vector<int>input={1,1,1,2,2};
  39. int d=2;
  40. vector<int>output=fun(input,d);
  41. if(output.empty()){
  42. cout<<"NO";
  43. }else{
  44. cout<<"YES -> ";
  45. for(int num:output){
  46. cout<<num<<" ";
  47. }
  48. cout<<endl;
  49. }
  50. return 0;
  51. }
Success #stdin #stdout 0.01s 5284KB
stdin
Standard input is empty
stdout
YES -> 1 2 1 2 1