Олимпиадный тренинг

Задача . F. Остаться в живых


В компьютерной игре есть \(n\) героев. У каждого героя есть здоровье \(h\) и изначальная броня \(a\). Пусть текущее количество брони равно \(a_{\mathit{cur}}\), изначально равное \(a\).

Когда герою наносится \(x\) урона, происходит следующее: если \(x < a_{\mathit{cur}}\), то из \(a_{\mathit{cur}}\) вычитается \(x\); иначе из \(h\) вычитается \(1\), а \(a_{\mathit{cur}}\) снова становится равно \(a\).

В начале игры вы выбираете значение \(x\) (целое число, строго большее \(0\)). Затем вы атакуете героев, пока все не погибнут: за один раунд вы наносите \(x\) урона каждому живому герою. Герой погибает, когда его здоровье становится равно \(0\). Игра заканчивается, когда все герои погибают.

Последний погибший герой получает количество очков, равное количеству раундов, в течение которых он был единственным живым героем. Остальные герои получают \(0\) очков. В частности, если в последнем раунде погибают несколько героев, то все герои получают \(0\) очков.

Вы сыграли по одной игре на каждое возможное значение \(x\) (от \(1\) до бесконечности). Между играми очки сбрасывались. Какое наибольшее количество очков было у каждого героя?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество героев.

Во второй строке записаны \(n\) целых чисел \(h_1, h_2, \dots, h_n\) (\(1 \le h_i \le 2 \cdot 10^5\)) — здоровье каждого героя.

В третьей строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 2 \cdot 10^5\)) — изначальное количество брони каждого героя.

Выходные данные

На каждый набор входных данных выведите \(n\) целых чисел — максимальное количество очков, которое было у героя в течение игр, сыгранных для каждого возможного \(x\).

Примечание

В первом наборе входных данных игра на \(x = 1\) играется так:

  • до всех раундов: у героев \(h = [3, 1, 2]\), \(a_{\mathit{cur}} = [3, 11, 5]\);
  • раунд \(1\): \(1\) урона наносится всем героям: \(h\) остается \([3, 1, 2]\), \(a_{\mathit{cur}}\) становится \([2, 10, 4]\);
  • раунд \(2\): \(h = [3, 1, 2]\), \(a_{\mathit{cur}} = [1, 9, 3]\);
  • раунд \(3\): у первого героя заканчивается броня, поэтому он теряет очко здоровья: \(h = [2, 1, 2]\), \(a_{\mathit{cur}} = [3, 8, 2]\);
  • ...
  • раунд \(9\): первый герой погибает, так как его здоровье становится равно \(0\): \(h = [0, 1, 1]\), \(a_{\mathit{cur}} = [0, 2, 1]\);
  • раунд \(10\): третий герой погибает: \(h = [0, 1, 0]\), \(a_{\mathit{cur}} = [0, 1, 0]\);
  • раунд \(11\): второй герой погибает: \(h = [0, 0, 0]\), \(a_{\mathit{cur}} = [0, 0, 0]\).

Второй герой погиб последним, и был единственным живым героев в течение одного раунда. Поэтому он получает \(1\) очко за эту игру.

Игра на \(x = 4\) играется так:

  • раунд \(1\): \(h = [2, 1, 2]\), \(a_{\mathit{cur}} = [3, 7, 1]\);
  • раунд \(2\): \(h = [1, 1, 1]\), \(a_{\mathit{cur}} = [3, 3, 5]\);
  • раунд \(3\): \(h = [0, 0, 1]\), \(a_{\mathit{cur}} = [0, 0, 1]\);
  • раунд \(4\): \(h = [0, 0, 0]\), \(a_{\mathit{cur}} = [0, 0, 0]\);

Третий герой погиб последним, и был единственным живым героев в течение одного раунда.


Примеры
Входные данныеВыходные данные
1 3
3
3 1 2
3 11 5
1
100
200
4
5 9 5 1
9 2 9 10
1 1 1 
20000 
0 4 0 0

time 7000 ms
memory 512 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w643
Комментарий учителя