#593. 少数服从多数
少数服从多数
题目描述
给定一个长度为 的序列 。
一次操作可以选择一个连续子区间 。设这个区间内某个数 的出现次数严格大于区间长度的一半,那么执行这次操作后,区间 中的所有数都会变成 。如果不存在这样的数,则这次操作不会产生任何变化。
你可以进行任意多次操作,每次只选择一个区间。
对于每个测试用例,求哪些数有可能通过若干次操作后,使整个序列所有元素都变成这个数。
输入格式
第一行一个整数 ,表示测试用例组数。
对于每个测试用例:
- 第一行一个整数 。
- 第二行 个整数 。
保证所有测试用例的 之和不超过 。
输出格式
对于每个测试用例输出一行。
若存在若干个数可以最终把整个序列变成它们之一,则按升序输出所有这样的数,相邻两个数之间用一个空格隔开。
如果不存在这样的数,输出 。
5
5
1 2 2 2 3
6
1 2 3 1 2 3
6
1 1 1 2 2 2
3
3 2 3
2
2 1
2
-1
1 2
3
-1
样例解释
第 1 组
序列为:
可以选择整个区间 ,其中数字 出现了 次,超过区间长度的一半,因此一次操作后整个序列变为:
所以答案为 。
第 2 组
序列为:
任意区间内都不存在某个数出现次数严格超过一半,因此无法进行有效改变。
答案为 。
第 3 组
序列为:
可以通过多次操作逐步扩展:
例如可以不断选择包含多数的区间,将某个数向外“扩散”,最终可以把整个序列变为 ;同理也可以全部变为 。
因此答案为:
第 4 组
序列为:
区间 中,数字 出现了 次,超过一半,因此可以一次操作变为:
答案为 。
第 5 组
序列为:
长度为 的区间需要某个数出现至少 次才算超过一半,但两个数不同,因此无法操作。
答案为 。
测试点性质
- 测试点 :
- 测试点 :
- 测试点 :序列单调不下降(即 )
- 测试点 :无额外限制
相关
在下列比赛中: