Да, но тогда получается непонятка с этими "removed_elements". Ведь после того как мы извлекли минимум в приоритетной очереди нам надо вернуть следующий по величине минимум, в то время как описанная в статье структура данных даст минимум среди всех позже добавленных элементов.
1 2022-06-27 01:15:37
Re: PriorityQueue c константным временем работы? (4 ответов, оставленных в Algo)
2 2022-06-27 00:19:01
Re: PriorityQueue c константным временем работы? (4 ответов, оставленных в Algo)
stacks_for_minima позволяет извлекать самый старый элемент из очереди, а не минимальный элемент. Это не то, что обычно нужно от приоритетной очереди.
3 2022-05-20 14:02:30
Re: Алгоритм Флойда и Данцига (2 ответов, оставленных в Problems)
Постановка задачи непонятная. Так как не сказано, что пути должны быть простыми, то ответ всегда будет либо ноль, либо бесконечность.
4 2021-12-04 17:45:07
Re: Помогите решить задачу (4 ответов, оставленных в Problems)
Спасибо.
Вероятно, эту задачу можно решить двоичным поиском? Будем подбирать ответ двоичным поиском. Для этого нам надо по заданному числу находить его позицию в списке сумм, потому что, зная это, мы можем определить, слишком большая ли середина поискового интервала или слишком маленькая (об этом нам скажет сравнение с K), и на основе этого перейти к поиску в левой или правой половине поискового интервала.
Для вычисления позиции числа X в списке сумм можно просто пройтись по всем элементам первого массива и для каждого из них - обозначим его через A\[i\] - с помощью двоичного поиска по второму массиву определить, сколько есть элементов, меньших X-A\[i\]. Сумма этих количеств даст нам искомую позицию X.
Итоговая асимптотика будет N log M log A, где A - величина чисел. Наверняка есть и более быстрые решения - как минимум, от вложенного двоичного поиска можно избавиться методом двух указателей. Но два бин. поиска, кажется, реализовать быстрее всего.
5 2021-12-03 23:21:27
Re: Помогите решить задачу (4 ответов, оставленных в Problems)
Можете ли вы привести ссылку на проблемсет, откуда взята эта задача, чтобы исключить возможность, что мы случайно вмешаемся в ход какого-нибудь соревнования?
6 2021-08-13 00:45:56
Re: Циклические суффиксы (4 ответов, оставленных в Problems)
Для правильного учёта бесконечности, кажется, ничего особого не нужно, кроме аккуратного разбора случаев? Если мы построим текст как s+s (т.е., припишем строку к себе), то если у строки s[0..] и строки s[i..] совпадающая часть доходит до конца текста, то, кажется, верно будет считать их совпадающими на всей бесконечности. Или есть контрпример?
7 2021-08-12 23:07:30
Re: Циклические суффиксы (4 ответов, оставленных в Problems)
Если не хочется суффиксным массивом, то альтернативно можно попробовать z-функцией, ведь она позволяет за O(1) сравнивать строку s[0..] со строкой s[i..] (поскольку z-функция сообщает нам позицию первого расхождения в этих двух строках).
8 2020-09-15 05:28:00
Re: Начинающий маг - Codeforces (4 ответов, оставленных в Problems)
Не правильно ли будет сделать обход в глубину, возвращающий самую глубокую вершину в поддереве, и брать для каждой вершины два самых больших результата среди всех её сыновей?
9 2016-08-18 04:25:42
Re: Ищу ментора/наставника (3 ответов, оставленных в Offtopic)
Здравствуйте, попробуйте написать на codeforces.ru, там аудитория большая.
Но если кратко - то во главу угла надо ставить практику. Сейчас доступен огромный набор задач с разборами решения, и это (по крайней мере, из нашего опыта) - оптимальный способ осваивать новые темы.
А учить теорию по книгам - это хотя тоже важно и полезно, но тут надо остерегаться того, чтобы не начать "скакать по верхам". К примеру - до приступания к графам лучше как следует потренироваться на задачах с двумя числами (НОД / НОК / вариации на их тему) и массивами чисел (НОД / НОК / поиск повторяющегося числа / поиск отсутствующего числа / и т.п.). А при изучении теории графов - сначала изучить обходы в глубину и ширину и нарешать много задачек с их помощью, и только потом браться за более сложные темы (как, к примеру, алгоритм Дейкстры).
11 2013-08-08 00:35:54
Re: БПФ (2 ответов, оставленных в Offtopic)
Здравствуйте. К сожалению, что-то не видно прикрепленного файла.
Называть меня "математиком" - это слишком громко, я всего лишь любитель, знакомый с математикой и алгоритмами в том объёме, в котором это помогает в олимпиадах.
Вопросы практической оптимизации лежат, зачастую, в другой плоскости, чем теоретические исследования: особенности выполнения процессором операций, поведения кеш-памяти и т.п. мало связаны с теоретическими изысканиями. И ответ зачастую зависит от условий, в которых должен применяться алгоритм. Поэтому нельзя заранее сказать, что важнее - экономить время или память.
12 2013-07-12 09:15:05
Re: Найти суперэлемент во входном потоке (3 ответов, оставленных в Problems)
Помогите, пожалуйста, с задачкой:
На вход подается поток из N чисел (каждое можно считать только один раз). Известно, что среди них есть суперэлемент, который встречается не менее, чем N/2 раз. Найти этот элемент, использовав O(1) памяти.
Может быть, не "не менее", а "больше"? Иначе задача может иметь не единственное решение.
И если действительно "больше", то решать можно так: просто для каждого бита посчитать, сколько раз в
том бите стоит 0 среди N чисел, а сколько - 1, и выбрать самое популярное значение. Т.е. надо будет K ячеек памяти (где K - число бит во входных числах), т.е. O(1), если это заранее известная константа.
13 2013-06-18 23:17:57
Re: Problem (3 ответов, оставленных в Problems)
Find maximum flow in this graph, where additionally N vertices are connected with the source vertex with edges with capacity=1, and M vertices are connected with the sink vertex with edges with capacity=Ki.
14 2013-02-08 16:04:41
Re: найти похожие подграфы (2 ответов, оставленных в Problems)
Может, не пытаться уходить от геометрической задачи к абстрактной графовой задаче? Скажем, как-то так: перебирать все тройки вершин в первом графе и во втором графе - тем самым мы зафиксировали некоторое "приложение" одного графа к другому, а дальше выбрать те пары вершин из первого множества и из второго множества, которые оказались близки.
15 2013-01-15 14:02:51
Re: Построения графиков (3 ответов, оставленных в Problems)
Здравствуйте. Боюсь, вы ошиблись форумом - потому что для решения вашей задачи требуются не алгоритмы, а использование конкретных средств вашей среды (WPF). Если не самая высокая производительность вас устроит, то можно просто отрисовывать график заново при каждом масштабировании/перемещении - это был бы самый простой вариант. Другой, более производительный, - нарисовать всё заранее в буфере в памяти, а при перетаскивании мышкой просто копировать нужную область на экран.
16 2012-11-05 15:13:29
Re: Текстовый Редактор [olymp.krsu.edu.kg ] (2 ответов, оставленных в Problems)
Решение видится таким: давайте хранить текст в "сжатом" виде, т.е. в виде списка пар (буква, количество). Тогда, чтобы выполнить операцию I, надо найти пару, в середину которой будут вставляться новые буквы, разбить эту пару на две и вставить между ними добавляемые буквы. При таких ограничениях (всё до 1000) ничего более сложного не требуется, задача на реализацию.
17 2012-10-31 13:05:01
Re: Timus 1930 (4 ответов, оставленных в Problems)
You should build a graph with 2 * N vertices: two vertices for each city (encoding which gear-mode is currently selected: for moving up or moving down).
UPD The edges in this new graph will have costs either 0 or 1, depending on whether we have to switch a gear-mode or not.
18 2012-10-31 12:48:00
Re: Timus 1930 (4 ответов, оставленных в Problems)
Why do you need adjacency matrix: it'll occupy 10000x10000 = 100M values? Use adjacency lists instead, their total size will be exactly 2*m.
19 2012-10-23 14:21:07
Re: Наибольшая общая подпоследовательность(быстрый алгоритм) (1 ответов, оставленных в Algo)
Большинство таких алгоритмов предназначены для особых случаев, и в общем случае (на произвольных строках и с большим алфавитом) работают не сильно лучше наивного алгоритма за O(n^2).
В статье, на которую ссылается Википедия ("A Survey of Longest Common Subsequence Algorithms" - Bergroth, Hakonen, Raita, 2000), написано:
Of the current methods, the O(n^2/ log n) algorithm of Masek and Paterson [28] is theoretically the fastest known.
В общем, как мне кажется, с точки зрения олимпиад изучение таких алгоритмов никакого профита не даст (хотя в каких-то отдельных ограниченных случаях - например, когда известно, что LCS имеет небольшую длину, - эти алгоритмы могут работать гораздо быстрее).
20 2012-09-20 10:52:25
Re: OUTSTANDING SOURCE OF INFORMATION FOR ANY PROGRAMMER (1 ответов, оставленных в Feedback)
Thank you!
DP is such a huge theme, that I'm not dare enough to start describing it
21 2012-08-22 19:02:00
Re: Венгерский алгоритм решения задачи о назначениях (3 ответов, оставленных в Feedback)
Исправил. Кстати, такие вещи удобнее постить в виде комментов внизу статьи
22 2012-07-15 23:14:54
Re: Игра (7 ответов, оставленных в Problems)
Надо рассмотреть игру с одной кучкой: здесь применима обычная теория Шпрага-Гранди, поэтому можно запрограммировать (или посчитать на бумажке) значения функции Гранди для, скажем, первых 100 размеров. Уверен, в них найдётся какая-нибудь закономерность, что позволит получить решение за O(n).
23 2012-07-13 17:07:03
Re: Игра (7 ответов, оставленных в Problems)
climbit
Эм, вообще-то у вас получилась циклическая динамика: из состояния можно прийти в себя же. Поэтому метод динамического программирования здесь не работает.
BVI94
Для решения избавимся от цикличности в игре. Переформулируя условие, за один ход каждый игрок может либо уменьшить расстояние между фишками (не более чем на K), либо увеличить его (не более чем на K, и не выходя при этом за пределы поля). Таким образом, мы получили игру, похожую на ним с увеличениями. Применяя аналогичные рассуждения, мы получаем, что делать ходы, увеличивающие расстояние между фишками, невыгодно, поэтому их можно не рассматривать.
Таким образом, мы получаем такую игру: есть кучка из N-2 камней (именно таково расстояние между клетками 1 и N), за один ход игрок может взять от 1 до K камней, и кто не может сделать ход - проигрывает. Такая игра решается простой динамикой за O (N * K), однако её решение можно получить и сразу, заметив, что эта игра - фактически k-ним, и ответ определяется просто остатком от деления на K+1.
24 2012-07-03 20:22:16
Re: Помогите с задачей (6 ответов, оставленных в Problems)
Делаем двоичный поиск.
Изначально мы только знаем, что ответ где-то между 0 и 4.
Возьмём середину этого отрезка: X=2. Тогда получим, что можно получить 1/2+4/2+2/2=3 свечи, что меньше N=4. Следовательно, дальше надо пробовать только более короткие свечи, т.е. теперь интервал поиска - это [0..2].
Снова возьмём середину: X=1. Получим 1/1+4/1+2/1=7 свечей, что больше N=4.
Следовательно, можно пробовать свечи и большей, чем 1, длины. Поэтому новый интервал поиска - это [1..2].
Возьмём X=1.5, посчитаем, и т.д.
Через достаточно большое количество шагов (скажем, 100) мы достаточно близко сойдёмся к искомому ответу 1.333333333.
25 2012-07-03 20:01:39
Re: Помогите с задачей (6 ответов, оставленных в Problems)
Двоичный поиск
Т.е. мы двоичным поиском побираем такое максимальное X, при котором ещё можно получить N свечей.