B. Collecting Game

time limit per test

1 second

memory limit per test

256 megabytes

You are given an array a of n positive integers and a score. If your score is greater than or equal to ai, then you can increase your score by ai and remove ai from the array.

For each index i, output the maximum number of additional array elements that you can remove if you remove ai and then set your score to ai. Note that the removal of ai should not be counted in the answer.

Input

Each test contains multiple test cases. The first line contains an integer t (1≤t≤5000) --- the number of test cases. The description of the test cases follows.

The first line of each test case contains a single integer n (1≤n≤105) --- the length of the array.

The second line of each test case contains n integers a1,a2,...,an (1≤ai≤109) --- the elements of the array.

It is guaranteed that the sum of n over all test cases does not exceed 105.

Output

For each test case, output n integers, the i-th of which denotes the maximum number of additional array elements that you can remove if you remove ai from the array and then set your score to ai.

Example

Input

Copy

复制代码

4

5

20 5 1 4 2

3

1434 7 1442

1

1

5

999999999 999999999 999999999 1000000000 1000000000

Output

Copy

复制代码
4 3 0 3 1 
1 0 2 
0 
4 4 4 4 4 

Note

In the first test case, the answers are as follows:

If we start with i=4, our initial score is a4=4 and a=20,5,1,2. We can remove 3 additional elements in the following order:

  1. Since 4≥1, we can remove 1 and our score becomes 5. After this, a=20,5,2.
  2. Since 5≥5, we can remove 5 and our score becomes 10. After this, a=20,2.
  3. Since 10≥2, we can remove 2 and our score becomes 12. After this, a=20.

If we start with i=1 we can remove all remaining elements in the array, so the answer is 4.

If we start with i=2, we can remove 3 additional elements in the following order: 1, 4, 2.

If we start with i=3, we can remove no additional elements.

If we start with i=5, we can remove 1 additional element: 1.

解题说明:此题是一道模拟题,采用贪心算法,首先对数组排序,从大到小计算每个元素"合并所有更小元素后能否继续向上吞并"的可达上界下标,最后按原数组顺序输出每个元素的可达上界。

cpp 复制代码
#include<bits/stdc++.h>
#include<vector>
#include<iostream>
#include<map>
#include<algorithm>
using namespace std;
int main()
{
	int t, n, i;
	cin >> t;
	while (t--)
	{
		cin >> n;
		vector<int>a(n), b(n);
		vector<long long>sm(n);
		map<int, int>mp;
		for (i = 0; i < n; ++i) 
		{
			cin >> a[i];
			b[i] = a[i];
		}
		sort(b.begin(), b.end());
		sm[0] = b[0];
		for (i = 1; i < n; ++i)
		{
			sm[i] = sm[i - 1] + b[i];
		}
		mp[b[n - 1]] = n - 1;
		for (i = n - 2; i >= 0; --i) 
		{
			if (sm[i] >= b[i + 1])
			{
				mp[b[i]] = mp[b[i + 1]];
			}
			else
			{
				mp[b[i]] = i;
			}
		}
		for (i = 0; i < n; ++i)
		{
			cout << mp[a[i]] << " ";
		}
		cout << endl;
	}
	return 0;
}
相关推荐
Felven1 小时前
C. Removing Smallest Multiples
c语言·开发语言
水饺编程3 小时前
第2章:Linux 基础,重启命令
linux·c语言·汇编
inrichtt4 小时前
第十一课时:串口中断接收与回调函数实战解析
c语言·数据结构·stm32·单片机·嵌入式硬件
潜创微科技4 小时前
CH592:集成 BLE 的青稞 RISC-V 无线 MCU
c语言·单片机·risc-v·无线投屏·低延迟·沁恒
学逆向的5 小时前
C 可变量参数
c语言·开发语言·网络安全
小莞尔5 小时前
【51单片机】【protues仿真】基于51单片机六路抢答器系统
c语言·单片机·嵌入式硬件·物联网·51单片机
心中有你02147 小时前
C 语言文件操作详解:从写入、追加到读取与定位的完整 实战
c语言·开发语言
知识分享小能手1 天前
C学习教程,从入门到精通,C语言文件 — 完整知识点详解(14)
c语言·网络·学习
羊羊一洋1 天前
ROM&RAM
c语言·stm32·学习