Fast I/O

Come già diceva Lawliet, probabilmente il modo migliore è usare getc_unlocked (il che non esclude che ci siano metodi più veloci, ma meno facili da implementare). Il parser di interi sarebbe qualcosa del genere (usando per comodità getchar_unlocked(), che legge da stdin):

int fast_read_int() {
int c, n = 0;
do c = getchar_unlocked();
while(c < ‘0’ || c > ‘9’);
do {
n = (n << 3) + (n << 1) + (c - ‘0’);
c = getchar_unlocked();
} while(c >= ‘0’ && c <= ‘9’);
return n;
}

(n << 3) + (n << 1) è solo un modo un pochino più veloce di scrivere n * 10. Se necessario, la funzione può facilmente essere modificata per leggere anche interi negativi (basta controllare la presenza di un carattere ‘-’). Se ti interessa anche l’output veloce, non dovrebbe essere troppo difficile scrivere una funzione simile che utilizzi putchar_unlocked (devi fare attenzione a un paio di cose, ossia che devi scrivere il numero al contrario e tenere conto degli zeri alla fine). Ma come hai giustamente detto, ormai si tende a utilizzare la lettura/scrittura da/su file sempre meno.