1

(4 ответов, оставленных в Feedback)

второй блок кода
написано cnt[maxlen]
должно быть cnt[alphabet]

2

(6 ответов, оставленных в Problems)

а если мы сначала сдвигаем [x1 ... x9] на 5 а потом [x5 ... x23] на 15 ? Я ж говорю разные подстроки сдвигаем. впрочем это уже не важно..

3

(6 ответов, оставленных в Problems)

to Oleg - не понял.. какой счетчик? мы делаем сдвиг для подстроки. много запросов. ну разумеется для разных подстрок

такс, на счет декартова дерева.. я правильно понимаю что если нам явным образом не нужны сами приоритеты приоритеты, то они сводятся только к тому чтобы получить "хорошее" дерево, т.е. можно их просто заменить случайным выбором кого к кому прицеплять в операции merge? (ну аналогично системе непересекающихся множеств)

4

(2 ответов, оставленных в Algo)

Хм. помоему не 4n а 2n-1 вершин должно быть. все вершины кроме листьев - разделяют элементы - их столько же сколько можно поставить перегородок между n элементами = n-1. ну и плюс листья - n штук. если еще для удобства добавить нулевой элемент - будет 2n.
Более того опыт показывает (http://e-maxx.ru/algo/segment_tree - скопировал просто отсюда код и потестил) что половина массива t - нули. даже если n = (2^k)+1. получается не полное двоичное дерево.. в чем нет ничего плохого при такой реализации (если делим пополам массив нечетной длины то "большая половина" будет левой частью).

5

(6 ответов, оставленных в Problems)

год назад Москва..
спасибо. ушел перечитывать декартово дерево

6

(6 ответов, оставленных в Problems)

какую структуру данных на массиве лучше взять чтоб быстро выполнять операции типа взять две соседние подстроки ([ai..aj] и [a{j+1} ... ak]) и поменять местами? в просто массиве долго переставлять, а в списке - долго искать iй элемент.. если еще какоето дерево сверху посторить то в нем нада еще чето менять.. вощем чето я не понимаю.

на прошлом 1/4ть финале асма была такая задача - нужно было выполнять много циклических сдвигов подстрок. фактически циклический сдвиг на к - это и есть поменять две соседние подстроки. Мы тогда эту задачу решили на прямую просто классом string - и прокатило.. но жури потом заявило что у них прост почему-то не было большего теста...

7

(4 ответов, оставленных в Problems)

бр, это понятно. собственно про это я и писал

Как решать немного по другому вроде понятно

интересно другое.. (читайте выше)

8

(4 ответов, оставленных в Problems)

Ним в поддавки - тотже ним, только кто берет последний камень - проигрывает.. граф игры практически совпадает с графом ним, вот только положение 1 - проигрышное.. а вот 0 какое? точно не проигрышное, иначе 1 - выигрышное.. значит 0 - выигрышное. получается что есть выигрышное состояние, из которого нет переходов.. и что делать? это противоречит части того (про выигрышные и проигрышные состояния) что написано тут http://e-maxx.ru/algo/sprague_grundy ... Хотя игра вроде равноправная.. Или я чето не так понимаю? в любом случае если мы пытаемся посчитать функцию Гранди она получается такойже как у обычного ним. но тогда скажем три кучки по одному камню - ним - выигрываем, а ним в поддавки - проигрываем - не сходится... Так равноправная ли это игра?

Как решать немного по другому вроде понятно, но интересно, как эта задача соотносится с теорией Шпрага-Гранди.

9

(3 ответов, оставленных в Algo)

Хм.. а мне на оборот какт странно было читать про n/2 и n/2.. прост раскладываем n не на n/2 и n/2 а сразу в сумму степеней двойки. Впрочем не суть)

10

(3 ответов, оставленных в Algo)

Я чет не понял зачем сложный if.. онж по сути добавляет итерацию цикла лишнюю после каждого срабатывания n&1

while (n)
        if (n & 1) {
            res *= a;
            --n;
        }
        else {
            a *= a;
            n >>= 1;
        }

не прощели так? прост проходимся по числам вида n^(2^k) , если нужно - домножаем

while(n) {
    if(n & 1)
        res *= a;
    a *= a;
    n = n >> 1;
}

11

(1 ответов, оставленных в Feedback)

for (int j=a; j!=p[j]; j=p[j])  p[j] = pa;
for (int j=b; j!=p[j]; j=p[j])  p[j] = pb;

после j=p[j] j сразу = pa, и мы пропускаем все элементы которые собирались "сослать" на pa..

ченить типа

for(int j=a, a=P[a]; a != pa; j = a, a=P[a]) P[j] = pa;
for(int j=b, b=P[b]; b != pb; j = b, b=P[b]) P[j] = pb;

ЗЫ.. атак сайт отл. большое вам спасибо) давно пользуюсь им, но ошибка эта все не исправляется чет)