лично в моём понимании как раз dsu и должен давать ощутимый выигрыш, когда прилетают рандомные union'ы и добавляются новые элементы через makeSet :)
те реализации, которые я видел, на вики, например, обычно не имели списка всех элементов одного множества, вот, например, та, которую для leetcode/codeforces использую DisjointSetUnion
если по какой-то причине не удалось сжать координаты (id элементов множеств), то придётся хеш таблицы использовать, а не плотные массивы
люди зачем-то использовали disjoint set, там где можно было обойтись обычным dfs'ом, и на этой почве как раз и возник вопрос :)
for (k = 1; k <= n; k++) {
ans += (k*((k%2) ? 1 : -1)*C[k])%MOD*Pow2((n-k)*(n-k-1)/2);
ans %= MOD;
}GetProcAddress не получает адрес произвольной функции в произвольном исполняемом файле. Она сделана и работает только для получения адреса специально объявленной функции, (обычно) скомпилированной в dll-ку. Retrieves the address of an exported function (also known as a procedure) or variable from the specified dynamic-link library (DLL).
Вам не кажется странным, что ваша элементарная функция auth() вышла вот такой вот портянкой? Это уже пропатченная функция что ли?
Дайте-ка еще полный код main. Всего файла. И напишите, каким компилятором и версией оно у вас собирается. Хочу посмотреть ассемблерный выхлоп у себя.
Я все еще 100% уверен, что по смещению +140 у вас совсем не auth(), а что-то другое. И оно ждет параметров функции - какие-то указатели на классы. Вы их не передаете, поэтому эта функция и падает.
Вы пробовали без оптимизации компилировать?