У меня есть класс, но программа вылетает после создания объекта его типа.
const int B = 707; /// sqrt(N)
struct Mex {
int x[N], group[B + 5];
/*
* This struct can push and pop an element with O(1),
* calculate MEX with O(sqrt(N))
*/
Mex() {
fill(x, x + N, 0);
fill(group, group + N, 0);
}
void push(int val) {
++x[val];
if (x[val] == 1)
++group[val / B];
}
void pop(int val) {
--x[val];
if (x[val] == 0)
--group[val / B];
}
int getValue() {
for (int i = 0; i <= B + 1; ++i) {
if (group[i] < B) {
for (int j = i * B, end = i * (B + 1); j < end; ++j) {
if (x[j] == 0) {
return j;
}
}
}
}
return -1;
}
};
Ну смотрите:
const int B = 707; /// sqrt(N)
int x[N], group[B + 5];
Значит, B ну очень сильно меньше N.
А заполняете вы
fill(group, group + N, 0);
куда больше, чем влазит. Портя при этом память...
P.S. Остальной функционал не смотрел. Все равно
программа вылетает после создания объекта его типа
до него дело не доходит...
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости