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;
}
相关推荐
Zwawa3 小时前
C语言函数指针与宏实战:从回调、表驱动菜单到X-Macro,讲透嵌入式代码解耦
c语言·单片机·嵌入式
David猪大卫5 小时前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
HPtiger5 小时前
C++ 入门笔记:从 C 到 C++ 的核心过渡(命名空间、输入输出、缺省参数、重载、引用、内联)
c语言·c++·学习
安妮细水长流9 小时前
ad7124
c语言·单片机
Zwawa1 天前
用两个按键做一个OLED菜单:先把选择和执行分开
c语言·单片机·嵌入式
心仪久了会沦陷1 天前
C语言数据结构入门——树与二叉树详解:概念、堆实现与链式遍历
c语言·数据结构·算法
Severus_black1 天前
【C++初阶】list使用及相关实现,思路顺滑流畅!
c语言·数据结构·c++·stl·list
希和20272 天前
C语言程序设计题|有序数组插入数字冒泡排序
c语言·数据结构·算法
Zwawa2 天前
屏幕不止一种:OLED、LCD1602字符屏、TFT/IPS图形屏和串口屏怎么用,这与TTY和PTY又有什么关系
c语言·单片机·嵌入式
Fruiticecake2 天前
C 程序员速通现代 C++(一):lambda、std::function、移动语义与智能指针
c语言·c++