A79548.merge
普及/提高-
通过率:0%
时间限制:1.00s
内存限制:128MB
题目描述
作为一个计算机科学家,小Y很喜欢研究零和一。
在一个仅包含 0 和 1 的序列中,小Y会通过对一些位置小Y掌握 n 种魔法,这 n 种魔法是有序的,每种魔法都有一个法力值 ai。他可以把法力值相同的两个魔法进行升级。小Y升级魔法按照如下的步骤进行:
-
找出能够升级(即出现大于等于2次)的魔法,并对法力值最小的魔法进行升级。
-
若法力值最小的魔法存在大于2个,找出最早出现(下标最小)的两个魔法进行升级。
-
升级时,将第一个魔法附加到第二个魔法上。第一个魔法会消失,第二个魔法的法力值会翻倍。
请你求出,小Y不断进行这样的升级直到没有魔法能够升级后,最终得到的每个魔法的法力值。
输入格式
输入共两行。
第一行,一个正整数,表示魔法数量 n;
第二行,n 个正整数,第 i 个正整数代表第 i 个魔法的法力值 ai。
输出格式
输出共两行。
第一行,输出最终的魔法数量;
第二行,按顺序输出每个魔法的法力值。
输入输出样例
输入#1
7 3 4 1 2 2 1 1
输出#1
4 3 8 2 1
输入#2
5 1 1 3 1 1
输出#2
2 3 4
输入#3
5 10 40 20 50 30
输出#3
5 10 40 20 50 30
说明/提示
输入文件名: merge.in 输出文件名 merge.out
数据范围和约定
对于 20% 的数据,保证 ∀i=j,ai=aj;
对于 40% 的数据,n≤5000;
对于 100% 的数据,1≤n≤2×105,1≤ai≤109。