|
0 / 0 / 0
Регистрация: 27.03.2016
Сообщений: 2
|
||||||
Префиксная сумма или что-то иное27.03.2016, 15:10. Показов 9115. Ответов 10
Метки нет (Все метки)
Не все числа одинаково полезны. Если, например, вам потребуется насобирать сумму
как можно больше, то вам ни к чему использовать отрицательные числа. Но может получиться так, что и выбора не останется и придется их использовать. Да и вообще воспользуемся модулем, чтобы уровнять положительный и отрицательные числа. И совсем не требуется насобирать максимальную сумму, достаточно чтобы модуль суммы был больше M. Требуется найти количество способов выбрать подотрезок в последовательности с заданным свойством. Входные данные: В первой строке задаются числа N M — количество чисел в последовательности и нижний предел модуля суммы (1 ≤ N ≤ 105, 1 ≤ M ≤ 109). В следующей строке задается N чисел Ai — числа последовательности (|Ai| ≤ 104). Выходные данные: В единственной строке выведите искомое количество подотрезков. Пример ввод 10 8 -2 9 3 6 3 8 -1 10 -6 7 вывод 42 Почему не может вложиться в 1 секунду? Использовал идею префиксных сумм. Возможно ли ошибка в том что использую 2 цикла? код
0
|
||||||
| 27.03.2016, 15:10 | |
|
Ответы с готовыми решениями:
10
CalcField или что-то иное?
sei()-cli() или что-то иное? |
|
Модератор
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,870
|
||
| 27.03.2016, 17:01 | ||
|
Так как Вы используете два вложенных цикла, от префиксных сумм толку нет. Но и без них будут те же два вложенных цикла. По сути в обоих случаях это полный перебор всех возможных отрезков. Но я не знаю, можно ли обойтись без полного перебора. По крайней мере, мне в голову не приходит ни одно условие для отсечения.
0
|
||
|
0 / 0 / 0
Регистрация: 27.03.2016
Сообщений: 2
|
|
| 27.03.2016, 17:52 [ТС] | |
|
там 10^5 степени , как и m 10^9 степени и Ai 10^4
0
|
|
|
Модератор
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,870
|
||||||
| 27.03.2016, 23:31 | ||||||
|
Значит, нужно использовать более быстрый алгоритм.
Вот набросок:
10: количество в дереве чисел больше заданного sum - m 11: количество в дереве чисел больше заданного m - sum 08: добавление в дерево элемента Добавлено через 2 минуты з.ы. Приведённый мной алгоритм работает и выдаёт правильный ответ. Но из-за того, что я использую неподходящий контейнер (вектор), он работает медленно.
0
|
||||||
|
194 / 174 / 30
Регистрация: 10.07.2012
Сообщений: 800
|
|
| 02.04.2016, 21:15 | |
|
расскажи, пожалуйста, откуда задача. если есть ссылка - вообще круто будет.
0
|
|
|
Модератор
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,870
|
|||||||
| 03.04.2016, 02:00 | |||||||
|
з.ы. Написал дерево. На случайных числах укладываюсь в 1 секунду. Но, так как дерево простое (несбалансированное), можно "завалить" программу специально подготовленными данными.
0
|
|||||||
|
194 / 174 / 30
Регистрация: 10.07.2012
Сообщений: 800
|
|
| 25.04.2016, 18:09 | |
|
ну да. возьмем массив {1, 1, 1, 1, 1, ...} и получим дерево высоты n. я не знаю, на чем ты умеешь писать, кроме шарпа. плюсы или java подошли бы. там есть std::set и TreeSet соответственно.
0
|
|
|
Модератор
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,870
|
||
| 25.04.2016, 19:07 | ||
|
0
|
||
|
194 / 174 / 30
Регистрация: 10.07.2012
Сообщений: 800
|
||
| 25.04.2016, 20:27 | ||
|
ну тогда можно два варианта предложить: написать все же руками какое-нибудь сбалансированное BST или отвечать на эти запросы деревом отрезков.
0
|
||
|
Модератор
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,870
|
||
| 25.04.2016, 21:13 | ||
|
задача простая, но нудная если ТС нужно, он сделает сам или найдёт готовое
0
|
||
|
193 / 100 / 131
Регистрация: 23.06.2015
Сообщений: 249
|
||||||
| 09.05.2016, 16:41 | ||||||
|
Давно решал.
Идея: Считаем префиксные суммы(pref) для исходного массива. Перебираем начало отрезка суммирования(i) Пусть sum_left = i ? pref[i - 1] : 0; Пусть j - подходящий конец отрезка суммирования, тогда: Тогда должно выполняться неравенство: |pref[j] - sum_left| > M => pref[j] - sum_left > M или pref[j] - sum_left < -M pref[j] > M + sum_left или pref[j] < -M + sum_left Тогда ответ для некоторого начало отрезка суммирования(i): число чисел в массиве префиксных сумм, больших M + sum_left и плюс число чисел в массиве префиксных сумм, меньших -M + sum_left - эти запросы можно вычислять за O((log(n))^2) с помощью дерева отрезков. Поскольку мы перебираем i от 0 до n - 1, а также строим дерево отрезков, то итоговая сложность O(n * (log(n)^2)). Код:
0
|
||||||
| 09.05.2016, 16:41 | |
|
Помогаю со студенческими работами здесь
11
Clone, Fork или что-то иное
Как проверить, что ты понял то или иное определение по математике? Нюансы синтаксиса: запись double *array - это указатель или что-то иное?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|