Sparse table: различия между версиями

Материал из Олимпиадное программирование в УлГТУ
Перейти к навигации Перейти к поиску
Нет описания правки
Нет описания правки
Строка 21: Строка 21:


== Ссылки ==
== Ссылки ==
* [http://adilet.org/blog/sparse-table/ adilet.org — Sparse Table]
* [http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_RMQ_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_%D1%80%D0%B0%D0%B7%D1%80%D0%B5%D0%B6%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B neerc.ifmo.ru/wiki — Решение RMQ с помощью разреженной таблицы]
* [http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_RMQ_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_%D1%80%D0%B0%D0%B7%D1%80%D0%B5%D0%B6%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B neerc.ifmo.ru/wiki — Решение RMQ с помощью разреженной таблицы]
* [http://informatics.mccme.ru/course/view.php?id=18 informatics.mccme.ru — Курс «Структуры данных» — часть 10]
* [http://informatics.mccme.ru/course/view.php?id=18 informatics.mccme.ru — Курс «Структуры данных» — часть 10]

Версия от 11:08, 22 апреля 2019

class SparseTable {
    int lg[100010], st[20][100010];
public:
    SparseTable(int a[], int size) {
        for (int i = 0; i <= size; i++)
            lg[i] = (i > 1 ? lg[i / 2] + 1 : 0);
        for (int p = 0; (1 << p) <= size; p++) {
            for (int i = 0; i + (1 << p) <= size; i++)
                st[p][i] = (p ? min(st[p - 1][i], st[p - 1][i + (1 << p - 1)]) : a[i]);
        }
    }
    int getMin(int l, int r) {
        int p = lg[r - l + 1];
        return min(st[p][l], st[p][r - (1 << p) + 1]);
    }
};

Ссылки на задачи

Ссылки