ввод и вывод

В некоторых задачах бывает очень много входных данных, поэтому тут я соберу ценные советы как ускорить ввод и вывод

1) ипользуйте \('\n'\) вместо \(endl\)

\(endl\) не только переносит строку но и сбрасывает буфер вывода, что замедляет процесс.

Но будте осторожны в интерактивных задачах, так как раз таки и нужно сбрасывать буфер

2)


	ios_base::sync_with_stdio(false);
	cout.tie(0);
	cin.tie(0);
		

первая строчка отключает синхронизацию потока ввода для scanf и cin
Если вы используете их вместе - это не для вас
Это ускоряет ввод и вывод, так как не приходтся проверять, а не изменилось ли ничего с последнего вывода вывода

Вторая строчка вообще не особо нужна, но я ее пишу на удачу
Третья строчка отключает сброс буфера при вводе

А что если нужно прямо очень быстро читать??? Ну, есть вот такая вот вещь: ТЫК
Это библиотека Сергея Копелиовича которая умеет много всего, но это все еще не самый быстрый способ

Давайте воспользуемся тем, что мы пишем конкретный ввод под конкретную задачу, значит - мы знаем формат входных данных. Таким образом можно избавиться от большого количества ненужных проверок.
Как пример: для решения задачи о вводе числа N и последующем вводе N неотрицательных чисел типа int вполне подойдет и вот такая реализация:


	const int _size = 1 << 13;
	unsigned char buff[_size | 1];
	short int pos = _size;
	char c;

	inline void getBuff() {
	    pos = fread(buff, 1, _size, stdin);
	    buff[pos] = '\n';
	    pos = 0;
	}

	inline void getChar() {
	    if (pos == _size)
	        getBuff();
	    c = buff[pos];
	    ++pos;
	}

	inline int getInt() {
	    getChar();
	    int ans = 0;
	    while (c != '\n' && c != ' ') {
	        ans = ans * 10 + c - '0';
	        getChar();
	    }
	    return ans;
	}
			

Согласитесь, не такая страшная реализация.
Для сравнения давайте посмотрим на эти посылки по этой задаче:
без всего: 514мс !!!
с тремя магическими строчками: 78мс
optimization.h: 46мс
простая реализация: 46мс

Ну а дальше вам придется просто мне поверить:
для ввода \(10^7\) целых неотрицательных чисел int необходимо:
без всего: ~20500мс
3 строчки: ~2400мс
optimization.h: ~740мс
эта реализация: ~480мс
Таким образом мы видим, что писать ввод под конкретную задачу куда продуктивнее, чем пользоваться обобщенными методами ввода

Аналогично можно написать и вывод.
Думаю вы уловили логику - пользуясь тем, что вы знаете что вы хотите считать/вывести уменьшать количество проверок и вообще ненужных действий