Контест Middle sync и атомики обновлено

Глобальный максимум через CompareAndSwap

Условие

Найдите максимум массива и сколько раз он встречается. Массив делится на w частей, каждую обрабатывает своя горутина. Горутины обновляют общий максимум через atomic.Int64.CompareAndSwap без мьютекса. Счётчик вхождений тоже атомарный.

Ввод: n w (1 ≤ n ≤ 1.5·10⁴, 1 ≤ w ≤ 32), затем n целых чисел (по модулю до 10¹⁸).

Вывод: максимум и число его вхождений.

Решение должно быть конкурентным (горутины), а вывод не должен зависеть от порядка их выполнения.

Пример

6 2
3 9 1 9 2 9
9 3

Как подойти

Локальные max и count в горутине, CAS-цикл для глобального max, второй этап для счётчика.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.