Привет, Дзен! Сегодня я расскажу вам о том, как в условиях экстремального программирования ускорить свои программы на C++ с привычных 4e8 до 2e10 в контексте очень простой задачи. Для начала скажу, что яро занимаюсь спортивным программированием, поэтому умею ценить время исполнения программы и используемую память. Способ ускорения, который я покажу вам сейчас на практике абсолютно бесполезен, поэтому даже, если на соревновании вам дали бы доступ к опциям компилятора, вероятнее всего программа ускорилась бы в два, может четыре раза, но никак не в 50. Начнем. Рассмотрим простую задачу: дано число n, посчитать сумму целых чисел в диапазоне [1..n) по модулю 2**64. Да, да, я также как и вы знаю решение за O(1): n * (n - 1) / 2. Но смысл считать в тупую в том, что операция сложения выполняется очень быстро, а взятие по модулю - путем переполнения стандартного типа unsigned long long. Сразу скажу, что время буду мерить утилитой time, а машинка моя - старенький ноутбук с Intel BYT-V 4Core 3540