Можно ли как-то ещё ускорить данный код?

134
07 мая 2019, 10:50
sort(subset2.begin(), subset2.end());
long long int v = 0;
for (int i = 0; i < subset1.size(); i++)
    v += upper_bound(subset2.begin(), subset2.end(), (k - subset1[i])) - subset2.begin();

Где subset1 и subset2 - это вектора подмножеств первой и второй половины множества соответственно.

Их я находил таким образом:

subset1.resize(1 << (vect1.size()));
for (int i = 1; i < (1 << vect1.size()); i++)
    subset1[i] = subset1[i & (i - 1)] + vect1[__builtin_ctz(i)];
Answer 1
size_t size1 = 1 << (vect1.size());
subset1.resize(size1);
for (int i = 1; i < size1; i++)
    subset1[i] = subset1[i & (i - 1)] + vect1[__builtin_ctz(i)];
sort(subset2.begin(), subset2.end());
long long int v = 0;
for (int i = 0; i < size1; i++)
  ...

Вы каждый раз считаете результат одного и того же выражения, а нужно считать один раз и сохранить его в каком то обьекте. Подозреваю: что вместо вектора лучше подойдет multiset.

READ ALSO
Как работает этот код по распаковке TGA файла? (unload_rle_data)

Как работает этот код по распаковке TGA файла? (unload_rle_data)

Начал копать библиотеку уроков по тому как работает OpenGL и не могу разобраться с одним методомСсылка на курс: https://github

131
Доступ к элементам std::map по индексу

Доступ к элементам std::map по индексу

Интересует, как можно получить доступ к элементу map'ы с индексом iНо! К примеру, при перебирании map'ы при помощи итерататора она отсортирована...

154
passing ‘const std::map&lt;int, int&gt;’ as ‘this’ argument discards qualifiers

passing ‘const std::map<int, int>’ as ‘this’ argument discards qualifiers

Когда пытаюсь прочитать значение карты map в методе класса с помощью map[key], то получаю непонятную ошибку

135