Что делать, если решение не проходит в контесте
Если решение работает локально, а в контесте падает, стоит поискать тест, на котором решение работает неправильно или медленно. Для этого можно запускать стресс-тесты (см. первый семинар в LMS) под санитайзерами.
Ниже перечислены основные причины, почему решение может работать медленно или потреблять много памяти
Медленный ввод-вывод
По умолчанию в C++ для iostream включен режим совместимости с stdio, который позволяет одновременно использовать оба интерфейса для ввода/вывода. В этом режиме производительность std::cin и std::cout понижается в несколько раз.
Поэтому если размер ввода/вывода имеет порядок от 100 000 чисел, вам нужно будет отключить этот режим. Делать это нужно до совершения каких-либо операций ввода-вывода, желательно первой же строкой в программе:
#include <iostream>
int main() {
std::ios_base::sync_with_stdio(false);
...
return 0;
}
Также обратите внимание на то, что std::cout может работать слишком медленно, если вы выводите порядка 100 000 чисел или более, и при этом у std::cout регулярно очищается буфер. Буфер очищается при каждом выводе std::endl, так что в случае большого вывода лучше выводить "\n" вместо std::endl. Также буфер std::cout очищается при каждом вводе через std::cin — это связано с тем, что при пользовательском вводе-выводе через обычный std::cin и std::cout в консоли, необходимо показать пользователю последний вывод и очистить буфер перед тем как запрашивать очередной ввод. Эта проблема для задач с большим выводом решается с помощью вызова std::cin.tie(nullptr); в самом начале программы. Выполнение всех этих рекомендаций приведёт к тому, что ввод-вывод при помощи потоков std::cin и std::cout будет работать не медленнее ввода-вывода через printf и scanf на задачах с большим вводом-выводом. Подробнее см. здесь.
Санитайзеры на маленьких тестах
На нескольких первых маленьких тестах в контесте решение запускается с санитайзером. Санитайзер увеличивает время работы и потреблении памяти программы, поэтому если в решении выделять статический массив максимального размера (например, int arr[100500]), то решение может упасть с ML.