Sparse table: различия между версиями
Перейти к навигации
Перейти к поиску
Ctrlalt (обсуждение | вклад) Нет описания правки |
Ctrlalt (обсуждение | вклад) Нет описания правки |
||
Строка 1: | Строка 1: | ||
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(t[p][l], t[p][r - (1 << p) + 1]); | |||
} | |||
}; | |||
== Ссылки == | == Ссылки == | ||
* [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 с помощью разреженной таблицы] |
Версия от 20:26, 1 октября 2014
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(t[p][l], t[p][r - (1 << p) + 1]); } };