B2. Wonderful Coloring - 2<734.div3>

简介: B2. Wonderful Coloring - 2<734.div3>

B2. Wonderful Coloring - 2


time limit per test


2 seconds


memory limit per test


256 megabytes


input


standard input


output


standard output


This problem is an extension of the problem "Wonderful Coloring - 1". It has quite many differences, so you should read this statement completely.


Recently, Paul and Mary have found a new favorite sequence of integers a1,a2,…,ana1,a2,…,an. They want to paint it using pieces of chalk of kk colors. The coloring of a sequence is called wonderful if the following conditions are met:


  1. each element of the sequence is either painted in one of kk colors or isn't painted;
  2. each two elements which are painted in the same color are different (i. e. there's no two equal values painted in the same color);
  3. let's calculate for each of kk colors the number of elements painted in the color — all calculated numbers must be equal;
  4. the total number of painted elements of the sequence is the maximum among all colorings of the sequence which meet the first three conditions.


E. g. consider a sequence a=[3,1,1,1,1,10,3,10,10,2]a=[3,1,1,1,1,10,3,10,10,2] and k=3k=3. One of the wonderful colorings of the sequence is shown in the figure.


The example of a wonderful coloring of the sequence a=[3,1,1,1,1,10,3,10,10,2]a=[3,1,1,1,1,10,3,10,10,2] and k=3k=3. Note that one of the elements isn't painted.


Help Paul and Mary to find a wonderful coloring of a given sequence aa.


Input


The first line contains one integer tt (1≤t≤100001≤t≤10000) — the number of test cases. Then tt test cases follow.


Each test case consists of two lines. The first one contains two integers nn and kk (1≤n≤2⋅1051≤n≤2⋅105, 1≤k≤n1≤k≤n) — the length of a given sequence and the number of colors, respectively. The second one contains nn integers a1,a2,…,ana1,a2,…,an (1≤ai≤n1≤ai≤n).


It is guaranteed that the sum of nn over all test cases doesn't exceed 2⋅1052⋅105.


Output


Output tt lines, each of them must contain a description of a wonderful coloring for the corresponding test case.


Each wonderful coloring must be printed as a sequence of nn integers c1,c2,…,cnc1,c2,…,cn (0≤ci≤k0≤ci≤k) separated by spaces where


  • ci=0ci=0, if ii-th element isn't painted;
  • ci>0ci>0, if ii-th element is painted in the cici-th color.


Remember that you need to maximize the total count of painted elements for the wonderful coloring. If there are multiple solutions, print any one.


Example


input

Copy

6

10 3

3 1 1 1 1 10 3 10 10 2

4 4

1 1 1 1

1 1

1

13 1

3 1 4 1 5 9 2 6 5 3 5 8 9

13 2

3 1 4 1 5 9 2 6 5 3 5 8 9

13 3

3 1 4 1 5 9 2 6 5 3 5 8 9


output

Copy

1 1 0 2 3 2 2 1 3 3

4 2 1 3

1

0 0 1 1 0 1 1 1 0 1 1 1 0

2 1 2 2 1 1 1 1 2 1 0 2 2

1 1 3 2 1 3 3 1 2 2 3 2 0


Note

In the first test case, the answer is shown in the figure in the statement. The red color has number 11, the blue color — 22, the green — 33.


题目大意



给定一个长度为 nn 的数组 aa,取出 kk 个相离的大小相同的下标集合,集合中每个下标对应的数字需不同,最大化集合的大小,并输出方案。


题目分析



首先统计每个数字出现的次数,如果大于等于 kk 那么显然每个集合分一个,否则待定。贪心地,最后将待定的数字依次 kk 个一组分配给每个集合即可,这里可以用 vector 实现。


#include <bits/stdc++.h>
using namespace std;
int T, n, k, x, ans[200001];
vector<int>num[200001], vec;
int main() {
  cin >> T;
  while (T--) {
    cin >> n;
    cin >> k;
    for ( int i = 1; i <= n; ++i) {
      num[i].clear();
      ans[i] = 0;
    }
    vec.clear();
    for ( int i = 1; i <= n; ++i) {
      cin >> x;
      num[x].push_back(i);
    }
    for ( int i = 1; i <= n; ++i) {
      if (num[i].size() > k)
        for ( int j = 0; j < k; ++j)
          ans[num[i][j]] = j + 1;
      else {
        for ( int j = 0, up = num[i].size(); j < up; ++j)
          vec.push_back(num[i][j]);
      }
    }
    for ( int i = 0, up = vec.size(); i + k - 1 < up; i += k) {
      for ( int j = i; j < i + k; ++j)
        ans[vec[j]] = j - i + 1;
    }
    for ( int i = 1; i <= n; ++i)
      printf("%d ", ans[i]);
    puts("");
  }
  return 0;
}
相关文章
|
NoSQL 搜索推荐 openCL
【C/C++ 调试 GDB指南 】gdb调试基本操作
【C/C++ 调试 GDB指南 】gdb调试基本操作
1272 2
|
存储 人工智能 Serverless
微服务和 Serverless 架构-函数计算 FC 简介及应用场景
微服务和 Serverless 架构-函数计算 FC 简介及应用场景
微服务和 Serverless 架构-函数计算 FC 简介及应用场景
|
4月前
|
Ubuntu 安全 应用服务中间件
宝塔面板搭建教程 | 完整的云服务器部署实践:Ubuntu + 宝塔 + WordPress
本文记录了从零搭建云服务器与个人博客的完整实践:涵盖Ubuntu Server选型、安全组配置、SSH连接、Nginx部署,以及通过宝塔面板+Docker快速上线WordPress博客的全过程。内容详实,步骤清晰,兼顾学习深度与落地效率,适合初学者系统掌握Linux运维与Web部署核心技能。(239字)
|
7月前
|
数据管理 编译器 C++
为什么好多人电脑都是一样的报错。为什么好多游戏和应用安装报错都一样?
简介: 0xc000007b报错常见于游戏和软件启动失败,主要因缺失或版本不符的Visual C++ 运行库所致。多数程序依赖该运行库提供的基础功能,如数学运算、内存管理、文件读写等。若系统中缺少对应版本(如2015、2022),或32/64位不匹配,均会导致报错。解决方法包括安装完整VC运行库、修复损坏DLL文件。建议用户安装VC运行库合集,确保兼容性。
397 5
|
10月前
|
机器学习/深度学习 人工智能 资源调度
大语言模型的核心算法——简要解析
大语言模型的核心算法基于Transformer架构,以自注意力机制为核心,通过Q、K、V矩阵动态捕捉序列内部关系。多头注意力增强模型表达能力,位置编码(如RoPE)解决顺序信息问题。Flash Attention优化计算效率,GQA平衡性能与资源消耗。训练上,DPO替代RLHF提升效率,MoE架构实现参数扩展,Constitutional AI实现自监督对齐。整体技术推动模型在长序列、低资源下的性能突破。
1218 8
|
9月前
|
人工智能 并行计算 机器人
未来人工智能如何重构”时间“?
时间是数学还是幻觉?从熵增到几何,从人类意识到AI智能,本文探讨时间的本质。线性、循环与拓扑模型揭示其多维可能;热力学箭头与认知局限引发哲学思辨;而AI的并行预测与信息压缩,或将重构时间本身。未来智能或不再线性行走,而是编织多维时间之网,重塑我们对存在的理解。(238字)
529 0
|
9月前
|
人工智能 安全 数据安全/隐私保护
破译AI“指纹”:我们如何检测人工智能生成内容?
破译AI“指纹”:我们如何检测人工智能生成内容?
594 119
|
Java 编译器 Maven
使用intellij idea搭建SSM架构的maven项目 详细
使用intellij idea搭建SSM架构的maven项目 详细
395 4
|
9月前
|
运维 算法 数据挖掘
【故障定位系列】基于DeepSeek的故障定位大揭秘
传统故障定位依赖专家经验与固定算法,难以应对复杂场景。引入DeepSeek大模型后,可凭借其强大推理与自适应能力,实现智能故障定位。通过“大模型+Agent”协同架构,大模型负责决策,Agent执行数据分析,既降低Token消耗,又保留智能化分析优势。未来,随着大模型理解与推理能力提升,故障定位将更高效、精准。
|
9月前
|
缓存 运维 监控
Redis 7.0 高性能缓存架构设计与优化
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Redis 7.0高性能缓存架构,探索函数化编程、多层缓存、集群优化与分片消息系统,用代码在二进制星河中谱写极客诗篇。
1777 3