Caché LRU

Tiempo límite 2 s
Memoria límite 256 MB
Casos de prueba 8
Dificultad Medio Algoritmos
Mostrar (3) Diseño de estructurasListas enlazadasTablas hash
Enviar solución

Puntos: 10

Tipos de problema
Lenguajes permitidos
C, C++, Java, Python, Rust

Implementa un caché con capacidad para \(c\) pares clave-valor que, cuando se llena, descarta el par usado hace más tiempo (least recently used):

  • get k: si la clave \(k\) está, imprime su valor y cuenta como uso; si no, imprime \(-1\).
  • put k v: guarda \(v\) en la clave \(k\) (si ya estaba, actualiza su valor) y cuenta como uso. Si con esto el caché pasa a tener más de \(c\) claves, descarta la usada hace más tiempo.

Ambas operaciones deben costar \(O(1)\).

Entrada

La primera línea tiene \(c\) \((1 \le c \le 3000)\) y \(q\) \((1 \le q \le 10^5)\), y siguen \(q\) líneas con una operación cada una \((0 \le k \le 10^4,\ 0 \le v \le 10^5)\).

Salida

Una línea por cada get, con su respuesta.

Ejemplo 1

Entrada

2 9
put 1 1
put 2 2
get 1
put 3 3
get 2
put 4 4
get 1
get 3
get 4

Salida

1
-1
-1
3
4

Ejemplo 2

Entrada

1 4
get 5
put 5 7
put 5 8
get 5

Salida

-1
8

Basado en el problema 146 de LeetCode, LRU Cache, adaptado a entrada y salida estándar; enunciado redactado para este juez. Es parte de la lista Grind 75 de Yangshun Tay.


Comentarios

No hay comentarios por el momento.