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

Материал из Олимпиадное программирование в УлГТУ
Перейти к навигации Перейти к поиску
Нет описания правки
Строка 26: Строка 26:
* [http://codeforces.com/blog/entry/45485 Codeforces — 2D Range minimum Query in O(1)]
* [http://codeforces.com/blog/entry/45485 Codeforces — 2D Range minimum Query in O(1)]
Код:
Код:
* [https://github.com/indy256/codelibrary/blob/master/java/structures/RmqSparseTable.java CodeLibrary — RMQ: Sparse Table]
* [http://github.com/indy256/codelibrary/blob/master/java/structures/RmqSparseTable.java CodeLibrary — RMQ: Sparse Table]
* [http://github.com/ADJA/algos/blob/master/DataStructures/SparseTable.cpp Algos — Sparse table]
* [http://github.com/ADJA/algos/blob/master/DataStructures/SparseTable.cpp Algos — Sparse table]
Задачи:
Задачи:

Версия от 08:09, 2 августа 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]);
    }
};

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

Ссылки

Теория:

Код:

Задачи: