Нам дається масив з усіма .
Тепер нам потрібно знайти, скільки різних сум може бути сформовано з його підматриць (де підматриця є суміжним діапазоном масиву, тобто для деяких , сума - це сума всіх елементи підмагістралі). Наприклад, якщо , то відповідь 4: ми можемо сформувати .
Я знаю, як підрахувати кількість різних сум за час .
Крім того, я зрозумів, що це схоже на класичну проблему, коли нам потрібно знайти кількість різних підрядків рядка. Я думав про можливість побудови масиву суфіксів та вирішення його аналогічним чином (за час). Але я не зміг зрозуміти, як змінити це для роботи тут. Наприклад, якщо ми використовуємо суфіксний масив для , отримаємо 5 випадків замість чотирьох прийнятних. Чи можливо це зробити за допомогою суфіксних масивів чи я думаю в неправильному напрямку?
Також є ще один напрямок, про який я думав. Розділіть і перемагайте. Як якщо б я розділив масив на дві частини щоразу, поки він не зводиться до одного елемента. Один елемент може мати одну суму. Тепер, якщо ми поєднаємо два окремих елемента, це можна зробити двома способами: якщо обидва одиночні діапазони мають один і той же елемент, то ми отримуємо 2 різні суми, або якщо обидва мають різні елементи, ми отримуємо 3 різні суми. Але я не в змозі узагальнити це для об'єднання масивів довжиною більше 1. Чи можливо злити два масиви розміром m і отримати відповідь в ?