Цитата(Ozzя @ 16.12.2006 14:47)
Обязательно.
И снимут очки с этой задачи.
Мувом пользовался постоянно, пока не перешел на си++ (и на memcpy соответственно : ) ; никогда не запрещали нигде
С чего это вдруг; запрещены только ассемблерные вставки.
2 Тём@: настоятельно рекомендую ознакомиться с
лекциями белоруса Ивана Метельского, золотого медалиста на студенческой 2004 года. Там очень классно написано об очень классных структурах данных. Бесценное чтиво для олимпиад и вообще.
Что касается твоего вопроса конкретно, есть такая прикольная стуктура, в которой операции выполняются за корень.
Смотри, пусть тебе надо оперировать с массивом длиной 10000 элементов. Заводим 100 массивов, по 200 элементов в каждом. Первые 100 элементов помещаем в первый массив, вторые 100 - во второй, и т.д. Таким образом, каждый из массивов заполнен наполовину. Теперь чтобы что-то куда-то вставить, работаем только с тем из малых массивов, в котором находится место, в которое надо вставлять/удалять. Каждый раз, когда какой-то из малых массивов заполняется полностью (200), мы сливаем всё обратно в большой массив, и перераспределяем, как в начале.
Перераспределение выполняется за O(n), но делать его придется не чаще, чем каждые sqrt(n) операций. Поэтому все действия выполняеются за O(sqrt(n)).
P.S. извините за doc ссылку, вирусов там нет; ссылке несколько лет уже
Могу залить в пдф.