fork download
  1. // Ý tưởng: Nếu A[i] có tần suất lớn hơn hoặc bằng 1, chắc chắn sẽ được đẩy vào một vector v[tần suất A[i]], ví dụ 5 xuất hiện 3 lần thì v[3] = {5}
  2. // Sau đó sort từng v[i] theo thứ tự từ bé đến lớn, rồi in ra theo thứ tự tần suất từ lớn đến bé
  3. #include<bits/stdc++.h>
  4. #define ull unsigned long long
  5. #define ll long long
  6. #define all(x) x.begin(), x.end()
  7. using namespace std;
  8. const int maxn = 1e5 + 1;
  9. int A[maxn], D[maxn];
  10. vector<int> v[maxn];
  11. void refresh(){
  12. for(int i=1;i<=maxn;++i){
  13. D[i]=0;
  14. }
  15. for(int i=1;i<=1e4;++i){
  16. v[i].clear();
  17. }
  18. }
  19. int main() {
  20. ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  21. // freopen("file.inp","r",stdin);
  22. // freopen("file.out","w",stdout);
  23. int t;
  24. int n, x, ma = 0, maxFreq = 0;
  25. cin >> t;
  26. while (t--) {
  27. ma = 0; maxFreq = 0;
  28. cin >> n;
  29. refresh();
  30. for (int i = 1; i <= n; ++i) {
  31. cin >> A[i];
  32. ++D[A[i]];
  33. ma = max(ma, A[i]);
  34. maxFreq = max(maxFreq, D[A[i]]);
  35. }
  36. for (int i = 1; i <= n; ++i) {
  37. v[D[A[i]]].push_back(A[i]);
  38. }
  39. for (int i = 1; i <= ma; ++i) {
  40. if (v[i].size() != 0) {
  41. sort(v[i].begin(), v[i].end());
  42. }
  43. }
  44. for (int i = maxFreq; i >= 1; --i) {
  45. if (v[i].size() != 0) {
  46. for (auto x : v[i]) {
  47. cout << x << " ";
  48. }
  49. }
  50. }
  51. cout << endl;
  52. }
  53. }
  54.  
Success #stdin #stdout 0.01s 6320KB
stdin
2
5
5 5 4 6 4
5
9 9 9 2 5
stdout
4 4 5 5 6 
9 9 9 2 5