Skip to content
Clases

Límites Prácticos y Memoria

En la mayoría de los jueces (Codeforces, LeetCode, OmegaUp), el límite de tiempo estándar es de 1 segundo.

Una computadora moderna puede ejecutar aproximadamente 10810^8 (100 millones) de operaciones elementales por segundo.

Antes de escribir código, mira el valor máximo de NN en el problema y busca qué complejidad te puedes permitir:

Límite de NNComplejidad AceptableAlgoritmos Posibles
N10N \le 10O(N!)O(N!)Permutaciones, Backtracking puro.
N20N \le 20O(2N)O(2^N)Máscaras de Bits, Subsets, Backtracking.
N500N \le 500O(N3)O(N^3)Floyd-Warshall, Multiplicación de Matrices.
N5,000N \le 5,000O(N2)O(N^2)Bubble Sort, DP básica, Pares iterativos.
N2105N \le 2 \cdot 10^5O(NlogN)O(N \log N)std::sort, Map/Set, Segment Tree.
N106N \le 10^6O(N)O(N)Two Pointers, Sliding Window, KMP, Hashing.
N109N \le 10^9O(N)O(\sqrt{N})Primalidad, Factorización.
N1018N \le 10^{18}O(logN)O(\log N)Binary Search, Exponenciación Binaria.

El tiempo no lo es todo. Si usas demasiada RAM, obtendrás Memory Limit Exceeded (MLE).

  • int: 4 bytes.
  • long long: 8 bytes.
  • char: 1 byte.
  • Límite típico: 256 MB.

Un arreglo de int de tamaño 10710^7 (10 millones) ocupa: 107×4 bytes40 MB10^7 \times 4 \text{ bytes} \approx 40 \text{ MB}

Esto es seguro. Pero un arreglo de 10810^8 int ocuparía 400 MB \to MLE.